如何让Android WebView清除缓存?

use*_*834 3 android caching webview

这是我的场景。我正在使用 WebView 在应用程序中显示我的移动就绪网站。我们定期更新我们的网站并自动清除我们的网站缓存,以便访问者获得我们网站的最新版本而不是过时的版本。我注意到有时 WebView 会提供旧内容 - 它有时不会加载我们网站的新版本。因此,我正在寻找一种方法来强制 WebView 显示新内容。

我知道我可以完全禁用 WebView 缓存并强制它每次都从我们的服务器抓取页面,但这效率很低。我希望缓存页面是最新版本时使用的缓存;如果不是,则不应使用缓存。

我能想到的唯一方法是手动清除缓存,如下所示:

@Override
public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
    view.clearCache(true);
}
Run Code Online (Sandbox Code Playgroud)

但是,这又是低效的——不需要在每次页面查看后清除整个缓存。我的问题是,有没有办法清除刚刚缓存的 HTML 文件并保留 CSS / JS / 等?这将是始终清除缓存和有时提供过时内容之间的一个很好的折衷方案。通过在每次页面视图后仅删除缓存的 HTML 文件,WebView 被迫从我的服务器获取最新的 HTML 页面,而无需重新加载 CSS 或 JS。

更好的是,为了节省不必要的处理能力的浪费,有没有办法从缓存中仅删除用户所在的特定页面?例如,加载 google.com 后,将删除 google.com 的缓存 HTML 页面(但不包括 CSS、JS 等),以便下次加载 google.com 时,获取最新版本。

谢谢!

小智 6

在 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>
Run Code Online (Sandbox Code Playgroud)

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


小智 5

mWebView.getSettings().setAppCacheEnabled(false);
mWebView.clearCache(true);
mWebView.loadUrl("about:blank");
mWebView.reload();
mWebView.loadUrl("http:xxxxxxx");
Run Code Online (Sandbox Code Playgroud)

我也在寻找解决方案,但对我来说唯一有效的是这个命令。