我正在创建一个混合应用程序,其中UI在服务器上,我在我的应用程序中使用webview,并仅在必要时使用本机功能(需要硬件访问)。
我的问题是,即使在服务器上上传新资源(如javascript等),Webview也会从缓存中加载资源。当我同时从计算机上的浏览器打开相同的URL时,我不会遇到此问题。如何确保webview从服务器更新其内容。此行为也是不可预测的,因为webview最终会在多次页面加载后更新其缓存。
在每次运行或LOAD_NO_CACHE模式下清除缓存都不是一个选项,因为我想要缓存功能(但是当服务器上有更新的资源时,不存在从缓存加载旧资源的风险)。
以下是代码段。 browser.loadURL();在应用程序的其他地方被调用
browser = (WebView) findViewById(R.id.browser);
progress_bar = (ProgressBar) findViewById(R.id.progressBar1);
browser.getSettings().setSavePassword(false);
browser.getSettings().setJavaScriptEnabled(true);
browser.setWebChromeClient( .... )
browser.setWebViewClient( .... ) // omitted complete functions to save space
答案 0 :(得分:2)
我在Web应用程序上做的一件事就是在脚本和链接标记中为我的JavaScript和CSS文件添加一个phoney版本标志。所以,它在网络上看起来像这样。这使浏览器认为资源不同并导致它重新加载。
<link href="./css/my_style.css?version=1.0" rel="stylesheet" type="text/css" />
<script src="./js/my_script.js?version=1.3" type="text/javascript"></script>
如果你想在应用程序方面控制这一点。您可以添加一种&#34;到期日期&#34;在您的SharedPreferences文件中。我为一些应用程序中的图像缓存执行此操作。基本上,您在该日期过去时清除缓存。它看起来像这样。
String expireDateString = getSharedPreferences("WebviewExpireCache", Context.MODE_PRIVATE);
Date today = new Date();
DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);
if(today.after(format.parse(expireDateString ))){
browser.clearCache(true);
}