【问题标题】:How do I clear previous WebView's content before loading the next WebView?如何在加载下一个 WebView 之前清除上一个 WebView 的内容?
【发布时间】:2012-02-14 21:46:51
【问题描述】:

我的场景是最初我正在加载一个 WebView,然后我正在加载具有不同 URL 的同一个 WebView。

我的问题是每当我加载下一个 URL 时,我可以看到之前加载的 URL 内容,然后显示我当前加载的 URL 内容。

我想在加载不同 URL 时清除内容。

说,

if (pos == 0) {
    mweb.clearCache(true);
    mweb.clearHistory();
    mweb.loadUrl("http://stackoverflow.com/");
}
else if (pos == 1) {
    mweb.clearCache(true);
    mweb.clearHistory();
    mweb.loadUrl("http://android.stackexchange.com/");
}

clearCache()clearHistory() 都不适合我。

【问题讨论】:

    标签: android android-webview


    【解决方案1】:

    在加载新网址之前使用mweb.clearView();

    编辑:

    clearView() 在 API 级别 18 中已弃用。使用 WebView.loadUrl("about:blank") 可靠地重置视图状态并释放页面资源(包括任何正在运行的 JavaScript)。

    解决@Liang 提出的问题:

    要获得一致的后退导航,您可以覆盖“onPageFinished”,并在其中检查 url 是否包含“about:blank”。如果是,请使用“webview.goBack()”

    【讨论】:

    • clearView() 在 API 级别 18 中已弃用。使用 WebView.loadUrl("about:blank") 可靠地重置视图状态并释放页面资源(包括任何正在运行的 JavaScript)。
    • WebView.loadUrl("about:blank") 会在BackForwardList 中添加一个空白页,所以如果使用WebView.goBack() 会回到空白页。我可以删除BackForwardList中的空白页吗?
    • 有人能快速解决@Liang 提出的问题吗? about:blank 有效,只是它在返回历史记录中添加了一个空白页面。
    • 你可以覆盖“onPageFinished”并检查url是否包含“about:blank”。如果是,请使用“webview.goBack()”
    • 嗨@afairplayer,我尝试override onPageFinished" and check whether the url contains "about:blank" or not. if yes, use "webview.goBack(),但它不起作用。很可能我误解了这个说法。你有一个最小的代码来展示这个想法吗?
    【解决方案2】:

    我通常在加载新的 url 之前隐藏 webview,然后在加载进度稍微提前时再次显示。

    // url loading
    mWebView.setVisibility(View.INVISIBLE);
    mWebView.loadUrl(newUrl);
    
    // show webview again
    mWebView.setWebChromeClient(new WebChromeClient() {
        @Override
        public void onProgressChanged(WebView view, int progress) {
            if (progress >= 10) {
                mWebView.setVisibility(View.VISIBLE);
            }
        }
    }
    

    【讨论】:

    • 这实际上是一个很好的方法。还没有测试过,但很高兴看到 loadData("about:blank") 之外的另一种方法有 +1
    • 不同的方法。有效!!
    【解决方案3】:

    我猜你可以使用Webview.clearHistory()。但是请记住在加载 WebView 后调用它是如此无能为力。例如代码:

    webView.loadData(someUrl);
    webView.clearHistory();
    

    由于未加载 webView,因此无法正常工作。我们必须像这样清除它:

    webView.setWebViewClient(new WebViewClient() {
                @Override
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
                    clearHistory();
                }
    }
    

    【讨论】:

      【解决方案4】:

      感谢 StefanK 的评论发现Here,您需要在WebViewClient 方法中以及onLoadResource(WebView view, String url) 方法中的onPageFinished(WebView view, String url) 方法中正确使用clearHistory() 方法;如下:

          myCoolWebView.setWebViewClient(new WebViewClient() {
              @Override
              public boolean shouldOverrideUrlLoading(WebView view, String url){
                  view.loadUrl(url);
                  return true;
              }
              @Override
              public void onLoadResource(WebView view, String url) {
                  // Notice Here.
                  view.clearHistory();
                  super.onLoadResource(view, url);
              }
              @Override
              public void onPageFinished(WebView view, String url) {
                  // And Here.
                  view.clearHistory();
                  super.onPageFinished(view,url);
              }
          });
      

      您还可以检查canGoBack()copyBackForwardList() 的操作。

      【讨论】:

        【解决方案5】:

        似乎将webview的图层类型设置为“软件”可以解决问题。 可能之前的内容是绘图缓存造成的。

        【讨论】:

          【解决方案6】:

          为空白页创建一个带有 HTML 的字符串并将其加载到 web 视图中。或者在加载之前隐藏它。

          【讨论】:

            【解决方案7】:

            在 loadData [Kuldip Bairagi] 之前使用以下语句

            view.loadUrl("javascript:document.open();document.close();");

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-09-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多