了解Android WebView是否显示缓存页面

时间:2011-05-25 13:55:42

标签: android caching webview

我正在制作一个Android应用程序,其中包括在webview中显示网站。据我了解,如果无法建立连接,webview会自动显示页面的缓存版本。

有没有办法找出所显示的页面是否已从服务器或缓存中提取?

甚至可能是缓存页面的年龄。

这是为了能够通知用户他/她是否正在查看旧信息。

2 个答案:

答案 0 :(得分:8)

您可以尝试黑客攻击 - 首先将WebView的cache mode设置为WebSettings.NO_CACHE并加载网址。然后,创建一个这样的自定义WebChromeClient:

final String urlToLoad = "http://www.my-url.com"; 
webview.setWebViewClient(new WebViewClient() {
    @Override
    public void onReceivedError(WebView view, int errorCode,
            String description, String failingUrl)
    {
        if (view.getSettings().getCacheMode() == WebSettings.LOAD_NO_CACHE && urlToLoad.equals(failingUrl))
        {
            view.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ONLY);
            view.loadUrl(urlToLoad);
            return;
        }
        else
        if (urlToLoad.equals(failingUrl))
        {
            // cache failed as well, load a local resource as last resort
            // or inform the user
        }
        super.onReceivedError(view, errorCode, description, failingUrl);
    }
});
webview.loadUrl(urlToLoad);

答案 1 :(得分:0)

由于WebView像浏览器一样工作,答案是否定的。 有一些hacky方法来检测这种情况。

或者替代解决方案是阻止页面被缓存(请参阅WebView文档)