Android Webview从过期的Cache中加载资源

时间:2014-12-16 19:23:46

标签: javascript android caching webview

我正在创建一个混合应用程序,其中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

1 个答案:

答案 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);
}