简体   繁体   English

Webview在更新Chrome 76后显示空白页

[英]Webview showing blank page after update chrome 76

I'm working on a project which use a WebView to show information, I used shouldInterceptRequest to add headers. 我正在使用WebView来显示信息的项目上,我应该使用shouldInterceptRequest添加标头。 Everything was working normally But after I updated chrome 76, It show blank page, and only shouldInterceptRequest was called. 一切正常,但是更新chrome 76之后,它显示空白页,仅应调用了InterceptRequest。

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);

I had tried some solutions : this , this but not working. 我曾尝试一些解决方案: 这个这个 ,但没有工作。 How can I solve this? 我该如何解决?

I have also face this problem. 我也面临这个问题。 This occurs because of you have enabled dom storage.. Clear cache from chrome and clear app data, uninstall and again run.. It works in my case as a charm.. Hopefully it will also work in your case 发生这种情况是因为您已启用dom存储。.从chrome清除缓存并清除应用数据,卸载并再次运行。.在我看来,它是一种魅力。.希望它在您的情况下也能使用

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM