如何在加载下一个WebView之前清除以前的WebView内容?

Jac*_*lva 22 android android-webview

我的场景最初是我正在加载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/");
}
Run Code Online (Sandbox Code Playgroud)

双方clearCache()clearHistory()没有为我工作.

a f*_*yer 46

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

编辑:

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

解决@Liang提出的问题:

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

  • `WebView.loadUrl("about:blank")`将在`BackForwardList`中添加一个空白页面,因此如果使用`WebView.goBack()`它将返回空白页面.我可以删除`BackForwardList`中的空白页吗? (11认同)
  • clearView()在API级别18中已弃用.使用WebView.loadUrl("about:blank")可靠地重置视图状态并释放页面资源(包括任何正在运行的JavaScript). (6认同)

Pim*_*oso 5

我通常在加载新的 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

我想你可以使用Webview.clearHistory(). 但请记住,WebView 加载后无法调用此函数。例如代码:

webView.loadData(someUrl);
webView.clearHistory();
Run Code Online (Sandbox Code Playgroud)

不会工作,因为 webView 未加载。我们必须像这样清除它:

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