查看 Android WebView 是不是显示缓存页面

Posted

技术标签:

【中文标题】查看 Android WebView 是不是显示缓存页面【英文标题】:Find out if Android WebView is showing cached page查看 Android WebView 是否显示缓存页面 【发布时间】:2011-09-01 19:22:33 【问题描述】:

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

有什么方法可以查出显示的页面是从服务器还是缓存中获取的?

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

这是为了能够在用户查看旧信息时通知用户。

【问题讨论】:

【参考方案1】:

您可以尝试破解 - 首先将 WebView 的 cache mode 设置为 WebSettings.NO_CACHE 并加载 URL。然后,像这样创建一个自定义 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);

【讨论】:

这仍然是一个 hack。为什么无法检查给定 URL 是否存在缓存?编辑:如果存在缓存,为什么 Android 会调用 onReceivedError()? 它只有在您首先设置“WebSettings.LOAD_DEFAULT”时才有效。因为如果您首先设置 WebSettings.NO_CACHE,即使成功加载,网页也永远不会保存到缓存中。 (注意::还将“onReceivedError”中的 if 条件更新为 view.getSettings().getCacheMode() == WebSettings.LOAD_DEFAULT && urlToLoad.equals(failingUrl))【参考方案2】:

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

或者另一种解决方案是防止页面被缓存(请参阅 WebView 文档)

【讨论】:

以上是关于查看 Android WebView 是不是显示缓存页面的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法预先缓存网页以使用 Android WebView 查看?

12-appium-查看webview元素

Android:WebView loadDataWithBaseURL 不显示验证码图片

如何显示包含 pdf 的 url 并将其显示在 Webview Android Java 中

版本 53 但不是版本 54 上的 Android WebView SSL 错误

Android WebView iFrame 字体缩放