java - 重新打开的应用程序不会在 webview 中加载 url
问题描述
我有一个带有 WebView 的片段,用于打开 url 并登录到某些服务,然后接收一些 cookie。问题是,当我在活动中打开应用程序和片段时,url 会正常加载到 WebView 中,但是当我关闭应用程序(以编程方式使用activity.finishAndRemoveTask()
)并再次(手动)打开它时 - url 不会加载。下一次应用程序重新启动(手动)后,一切恢复正常。我要打开的网址有两个重定向。
这是我的片段类:
public class MyFragment extends Fragment implements WebResourceClient.CookieListener {
private String URL = "https://someurl.com";
@OnClick(R.id.close)
public void detachFragment() {
FragmentManager manager = getFragmentManager();
if (manager != null) {
manager.popBackStackImmediate();
}
}
@BindView(R.id.web_container)
WebView webContainer;
@BindView(R.id.progress_bar)
ProgressBar progressBar;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.ny_fragment, container, false);
ButterKnife.bind(this, view);
startWebView();
return view;
}
@SuppressLint("SetJavaScriptEnabled")
private void startWebView() {
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookies(null);
WebSettings settings = webContainer.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDomStorageEnabled(true);
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
settings.setMediaPlaybackRequiresUserGesture(false);
settings.setUserAgentString(Core.USER_AGENT_FOR_GOOGLE);
settings.setAppCacheEnabled(false);
webContainer.clearCache(true);
WebView.setWebContentsDebuggingEnabled(false);
webContainer.setWebViewClient(new WebResourceClient(this));
webContainer.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress < 100) {
webContainer.setVisibility(View.INVISIBLE);
progressBar.setVisibility(View.VISIBLE);
} else {
webContainer.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.INVISIBLE);
}
}
});
webContainer.loadUrl(URL);
}
@Override
public void onDestroyView() {
webContainer.stopLoading();
super.onDestroyView();
}
@Override
public void onReceiveCookie(String cookie) {
detachFragment();
...
}
@Override
public void showProgress() {
webContainer.setVisibility(View.INVISIBLE);
progressBar.setVisibility(View.VISIBLE);
}
}
这是我的 WebViewClient:
public class WebResourceClient extends WebViewClient {
private final static String someUrl = "https://someOtherUrl";
private CookieListener listener;
public WebResourceClient(CookieListener listener) {
this.listener = listener;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
if (url.contains(someUrl)) {
listener.showProgress();
}
view.loadUrl(url);
return true;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.contains(someUrl)) {
listener.lockWebView();
}
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
// if (url.contains(someUrl)) {
String cookies = CookieManager.getInstance().getCookie(url);
String cookie = getCookie(cookies);
if (!TextUtils.isEmpty(cookie)) {
view.stopLoading();
listener.onReceiveCookie(cookie);
}
super.onPageFinished(view, url);
}
private String getCookie(String cookies) {
...
}
public interface GoogleLoginListener {
void onReceiveCookie(String cookie);
void showProgress();
}
}
我像那里一样打开片段:
MyFragment fragment = new MyFragment();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction tr = fm.beginTransaction();
tr.addToBackStack(fragment.getClass().getSimpleName());
tr.replace(R.id.fragment_root, fragment);
tr.commit();
解决方案
推荐阅读
- javascript - Javascript从悬停的所有元素中删除类
- python - 为什么我不能重塑从图像派生的 numpy 数组?
- flutter - 在 Navigator.pushNamed 中如何使用 PositionedTransition 或 AlignTranstition 进行导航?
- sql-server - 链接服务器 COLLATION COMPATIBLE 属性是否保证在链接服务器上执行过滤器?
- postgresql - 无法在 BigSur 上重新启动 Postgresql
- javascript - 如何配置自定义页面swups
- python - 无法让 Chromium 浏览器运行无头 Pi OS
- python - 删除数据集中的异常值而不进行平滑处理
- javascript - 如何在模板中将正确的信息传递给 Django modal
- python - GTK - Python Treeview 列重新排序警告