查看 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 查看?
Android:WebView loadDataWithBaseURL 不显示验证码图片
如何显示包含 pdf 的 url 并将其显示在 Webview Android Java 中