【问题标题】:Webview showing blank page after update chrome 76更新 chrome 76 后 Webview 显示空白页
【发布时间】:2019-09-18 03:20:37
【问题描述】:

我正在开发一个使用 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);

我尝试了一些解决方案:thisthis,但没有奏效。我该如何解决这个问题?

【问题讨论】:

    标签: android google-chrome webview


    【解决方案1】:

    发生这种情况是因为您启用了 dom 存储。从 chrome 中清除缓存并清除应用程序数据,卸载并再次运行。在我的情况下,它可以作为一种魅力。希望它也适用于您的情况

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-19
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      • 2019-12-27
      • 2018-04-07
      • 1970-01-01
      相关资源
      最近更新 更多