如何使Android WebView清除缓存?

3
这是我的情景。我正在使用WebView在应用程序中显示我的移动端网站。我们定期更新网站并自动清除网站缓存,以便访问者获取最新版本的网站而不是旧版本。我注意到有时WebView会提供旧内容 - 它有时无法加载我们网站的更新版本。因此,我正在寻找一种方法来强制WebView显示新内容。
我知道我可以完全禁用WebView缓存,并强制它每次从我们的服务器抓取页面,但这是低效的。我希望当缓存页面是最新版本时使用缓存;如果不是,则不应使用缓存。
我能想到的唯一方法是手动清除缓存,类似于以下内容:
@Override
public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
    view.clearCache(true);
}

然而,这种方法效率不高--每次页面显示后都没必要清除整个缓存。我的问题是,是否有办法仅清除缓存的HTML文件,而将CSS/JS等保留下来?这样就可以在总是清除缓存和提供陈旧内容之间达成良好的平衡。仅在每次页面视图后移除缓存的HTML文件,WebView被迫从服务器上抓取最新的HTML页面,而不需要重新加载CSS或JS。

更好的方法是,为了节省不必要的处理能力,是否有一种方式仅从缓存中删除用户正在访问的特定页面?例如,在加载google.com之后,删除google.com的缓存HTML页面(但不删除CSS、JS等),以便下一次加载google.com时将获取最新版本。

谢谢!


我来问一下你是否找到了这个问题的答案。因为即使更改资产网址对我也没有用...谢谢。 - Dazag
2个回答

5
在HTML代码中,为您的JS/CSS文件链接添加一个参数,可以是日期时间或版本字符串,例如:
<link rel='stylesheet' href='style/jquery.mobile-1.3.2.min.css?ver=1.3.2'>
<script src="js/jquery-1.8.3.min.js?ver=1.8.3"></script>
<script src="js/jquery.mobile-1.3.2.min.js?ver=1.3.2"></script>
<script src="js/my_script.js?ver=201603111428"></script>

当你的脚本或样式表文件更新时,只需更改为新的参数值,然后Webview会将其视为新的URL并进行重新加载。


5
mWebView.getSettings().setAppCacheEnabled(false);
mWebView.clearCache(true);
mWebView.loadUrl("about:blank");
mWebView.reload();
mWebView.loadUrl("http:xxxxxxx");

我也在寻找解决方案,但对我有效的只有以下命令。

当时那个帽子真的起了作用!我为此感到非常沮丧,哈哈。 - Rene Ferrari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接