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

时间:2012-01-20 09:56:01

标签: android android-webview

我的方案最初是我正在加载WebView,稍后我正在使用不同的URL加载相同的WebView。

我的问题是每当我加载下一个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()都不适合我。

7 个答案:

答案 0 :(得分:45)

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

修改

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

解决@Liang提出的问题:

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

答案 1 :(得分:2)

我通常在加载新网址之前隐藏网页视图,然后在加载进度稍微提高时再次显示它。

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

答案 2 :(得分:2)

我猜你可以使用<div class="row-fluid-wrapper row-depth-1 row-number-3 "> <div class="row-fluid "> <div class="span4 widget-span widget-type-custom_widget "> <div class="cell-wrapper layout-widget-wrapper"> <div class="clearfix cta-wrapper"> <div class="cta-text"> <p>Col 1</p> <p>Text.</p> </div> </div> </div> </div> <div class="span4 widget-span widget-type-custom_widget"> <div class="cell-wrapper layout-widget-wrapper"> <div class="clearfix cta-wrapper"> <div class="cta-text"> <p>Col 2</p> <p>Text.</p> </div> </div> </div> </div> <div class="span4 widget-span widget-type-custom_widget"> <div class="cell-wrapper layout-widget-wrapper"> <div class="clearfix cta-wrapper"> <div class="cta-text"> <p>Col 3</p> <p>Text</p> </div> </div> </div> </div> </div> </div>。但是记得在加载WebView之后调用它是如此无能为力。例如代码:

<enabled>false</enabled>

将无效,因为未加载webView。我们必须清除它:

<repositories>
    <repository>
        <id>s3-snapshot</id>
        <url>s3://my_url/snapshot</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

答案 3 :(得分:1)

Thnx对StefanK的评论发现Here,您需要在clearHistory() WebViewClient方法完成加载页面时使用onPageFinished(WebView view, String url)方法onLoadResource(WebView view, String url) }} 方法;如下:

    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()进行操作。

答案 4 :(得分:0)

似乎将webview的图层类型设置为“软件”可以解决此问题。 以前的内容可能是由于图形缓存引起的。

答案 5 :(得分:0)

为空白页创建带有HTML的字符串,并将其加载到webview中。或者隐藏它,直到加载为止。

答案 6 :(得分:-4)

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

view.loadUrl( “JavaScript的:document.open(); document.close();”);