android - 更新 chrome 76 后 Webview 显示空白页面
问题描述
我正在开发一个使用 WebView 显示信息的项目,我使用 shouldInterceptRequest 添加标题。一切正常但是在我更新 chrome 76 后,它显示空白页,并且只调用了 shouldInterceptRequest。
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setLoadWithOverviewMode(false);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.getSettings().setSupportMultipleWindows(true);
webView.getSettings().setPluginState(WebSettings.PluginState.ON);
webView.clearCache(true);
webView.getSettings().setAppCacheEnabled(false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
webView.setWebViewClient(new WebViewClient() {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Nullable
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
Log.d("TAG", "shouldInterceptRequest: 2");
if (!checkFirstLoad) {
try {
checkFirstLoad = true;
Request req;
OkHttpClient httpClient = new OkHttpClient();
req = new Request.Builder()
.url(PA_URL.trim())
.addHeader("Pa-Token", token)
.addHeader("Pa-Redirect", url)
.addHeader("Pa-App-Token", randomString())
.addHeader("Pa-App-Encrypt", md5(deviceId+oldToken)).build();
Response response = httpClient.newCall(req).execute();
return new WebResourceResponse(MimeTypeMap.getFileExtensionFromUrl(request.getUrl().toString()),
response.header("content-encoding", "utf-8"),
response.body().byteStream());
} catch (IOException e) {
e.printStackTrace();
return null;
}
} else {
return null;
}
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
Log.d("TAG", "shouldOverrideUrlLoading: "+url);
return true;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString());
Log.d("TAG", "shouldOverrideUrlLoading: "+request.getUrl().toString());
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
progressBar.setVisibility(View.VISIBLE);
Log.d("TAG", "onPageStarted: "+url);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
progressBar.setVisibility(View.GONE);
Log.d("TAG", "onPageFinished: "+url);
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
super.onReceivedSslError(view, handler, error);
handler.proceed();
Log.d("TAG", "onReceivedError: "+error);
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
progressBar.setVisibility(View.GONE);
Log.d("TAG", "onReceivedError: "+error);
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
progressBar.setVisibility(View.GONE);
Log.d("TAG", "onReceivedError: "+ description);
}
});
webView.loadUrl(url);
解决方案
发生这种情况是因为您启用了 dom 存储。从 chrome 清除缓存并清除应用程序数据,卸载并再次运行。它在我的情况下作为一种魅力。希望它也适用于您的情况
推荐阅读
- webots - Webots 在 Windows 上启动时崩溃
- r - R case_when 和 %in%
- typescript - TypeScript: is there a way to convert the union type of strings to an enum
- javascript - Vue.js form page loses its data when coming back from a new page
- javascript - 将数据传递给 Vue 子组件而不重新挂载它
- python - 如何从scrapy中的后续函数获取数据
- python - How handle errors on AioHttp using Connexion
- scala - Spark scala finding value in another dataframe
- optaplanner - Design optaplanner constraints of booking system
- bootstrap-4 - 如何修复使用引导程序创建的下拉菜单