【发布时间】:2011-09-01 19:22:33
【问题描述】:
我正在制作一个 Android 应用程序,其中包括在 web 视图中显示网站。据我了解,如果无法建立连接,webview 会自动显示页面的缓存版本。
有什么方法可以查出显示的页面是从服务器还是缓存中获取的?
甚至可能缓存页面的年龄。
这是为了能够在用户查看旧信息时通知用户。
【问题讨论】:
我正在制作一个 Android 应用程序,其中包括在 web 视图中显示网站。据我了解,如果无法建立连接,webview 会自动显示页面的缓存版本。
有什么方法可以查出显示的页面是从服务器还是缓存中获取的?
甚至可能缓存页面的年龄。
这是为了能够在用户查看旧信息时通知用户。
【问题讨论】:
您可以尝试破解 - 首先将 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);
【讨论】:
由于 WebView 像浏览器一样工作,所以答案是否定的。 有一些 hacky 方法可以检测这种情况。
或者另一种解决方案是防止页面被缓存(请参阅 WebView 文档)
【讨论】: