查明 Android WebView 是否显示缓存页面

发布于 2024-11-09 08:49:19 字数 170 浏览 0 评论 0原文

我正在制作一个 Android 应用程序,除其他外,它还可以在网络视图中显示网站。据我了解,如果无法建立连接,网络视图会自动显示页面的缓存版本。

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

甚至可能缓存页面有多旧。

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

I'm making an Android application that, among other things, shows websites in a webview. As far as I understand, the webview automatically shows a cached version of the page if a connection can't be established.

Is there any way to find out if the page shown has been fetched from the server or cache?

Maybe even how old the cached page is.

This is to be able to notify the user if he/she is viewing old information.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

半葬歌 2024-11-16 08:49:19

您可以尝试破解 - 首先设置 WebView 的 缓存模式 到 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);

You could try a hack - at first set WebView's cache mode to WebSettings.NO_CACHE and load the URL. Then, create a custom WebChromeClient like this:

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);
凉城 2024-11-16 08:49:19

由于 WebView 的工作方式与浏览器类似,因此答案是否定的。
有一些巧妙的方法可以检测这种情况。

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

Since the WebView work like the browser the answer is no.
There are some hacky way to detect that situation.

Or an alternative solution would be preventing the page from being cached (see WebView documentation)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文