HTML5离线appcache:强制刷新所有内容?

时间:2012-09-25 12:16:13

标签: html5 offline-caching html5-appcache

我的小型HTML5应用程序需要在服务器上重新部署。我知道我只需触摸.appcache文件就可以在下次访问时将所有浏览器更新到最新版本的文件。

清单看起来像这样:

CACHE MANIFEST
#Version: 201209251353

index.html
apple-touch-icon.png
css/styles.css
data/dump.bin
img/background.png
img/sprites.png
js/core.js
js/jquery-1.8.1.min.js
vid/walkthrough.mov

为了“触摸”,我添加了一条评论(#Version :),我的意思是在内容发生变化时更新。

奇怪的是,有些文件已更新。不是全部,对于isntance,一位同事获得了最新的core.js,但仍然显示了一个旧的walkthrough.mov。

是否有一种强制更新缓存中所有文件的简单机制?

我在SO上找到了以下代码并将其包含在脚本中,希望它能提供帮助。不确定它是多么需要:(

    // Application cache refresh
    window.addEventListener('load', function(e) {

      window.applicationCache.addEventListener('updateready', function(e) {
        if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
          // Browser downloaded a new app cache.
          // Swap it in and reload the page to get the new hotness.
          window.applicationCache.swapCache();
          if (confirm('A new version of this site is available. Load it?')) {
            window.location.reload();
          }
        } else {
          // Manifest didn't changed. Nothing new to server.
        }
      }, false);

    }, false);

2 个答案:

答案 0 :(得分:6)

您在清单和内容上设置了哪些expiry headers

如果您将({1}}的到期时间设置为将来一个月,并且该文件足够小,可以进入浏览器缓存(注意:不是应用程序缓存)然后浏览器将从浏览器缓存中的版本刷新应用程序缓存,而不是再次通过网络请求它(如果它从提取文件开始不到一个月)。

如果您在清单文件上设置了未来的到期日期,那么在某些浏览器的某些版本中,这可能会导致无法检测到更新的清单。

答案 1 :(得分:0)

我正在使用的另一种解决方案,但不是很漂亮,就是重命名appcache文件。然后,所有内容都将刷新,因为appcache将丢失。