在JB及以上版本中加载几个页面后清空webView

时间:2014-03-26 19:49:18

标签: android webview android-4.2-jelly-bean

我正在使用webView在我的Android应用中显示一些内容:

WebView webView = (WebView) rootView.findViewById(R.id.web_view);
WebSettings settings = webView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
settings.setJavaScriptEnabled(true);
settings.setLoadsImagesAutomatically(true);
settings.setSupportZoom(false);
webView.loadUrl("about:blank");
webView.loadData(result.getHtmlContent(), "text/html; charset=UTF-8", "UTF-8");

这在ICS及以下版本中完美无缺,但在JB及以上版本中,页面首次加载正确(一般为2到5/6次)。之后,webView显示为空白。即使在调试之后,代码似乎正常运行,它只是不显示。查看页面的唯一方法是终止应用程序并重新启动它,然后再次发生。

有谁知道如何解决这个问题?

4 个答案:

答案 0 :(得分:0)

为什么在webView.loadUrl("about:blank")电话之前有loadData?如果删除about:blank加载,它会有帮助吗?

此外,“未显示”非常模糊 - 内容是否已加载但未呈现或页面无法导航到?检查您从WebViewClient.onPageStarted / onPageFinished回调中获得的网址。如果您从loadData致电onPageFinished,如果url ==“about:blank”,如果这是导航问题,则可能会有所帮助。

答案 1 :(得分:0)

我用过

webView.loadData(htmlContent, "text/html; charset=UTF-8",null);

表示版本大于GINGERBREAD_MR1。

并且

webViewLivraison.loadDataWithBaseURL("",htmlContent, "text/html", "UTF-8", "");

适用于GINGERBREAD_MR1及以下版本。它对我来说很好。

试试这个并告诉我。

答案 2 :(得分:0)

在页面加载之前,每次尝试清除缓存,如果需要,还要尝试清除缓存。

WebSettings settings = webView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
settings.setJavaScriptEnabled(true);
settings.setLoadsImagesAutomatically(true);
settings.setSupportZoom(false);
webView.setWebViewClient(new CustomWebClient());
        webView.clearView();
         // add if u need
        webView.clearCache(true);
        webView.loadData(result.getHtmlContent(), "text/html; charset=UTF-8", "UTF-8");

答案 3 :(得分:0)

可能的原因导致" WebView在完成加载页面后变为空白":

  1. 如果布局xml文件中定义的WebView部件具有类似

    的尺寸

    android:layout_width="wrap_content"
    
    android:layout_height="wrap_content"
    

  2. 然后在加载页面之后,定义内容并且WebView尝试" wrap"因此,在某些情况下,将视图的尺寸缩小为0dp并使您的WebView不可见。 解决方案:将所有这些更改为fill_parent     

        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        

    1. 这可能是由SSL认证错误引起的。试试这个:
    2. public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
          handler.proceed();
      }