HTML5离线应用程序缓存:强制刷新所有内容?

3

我的小型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:)来标识“touch”,每次内容更改时都需要更新它。
奇怪的是,一些文件已经更新了。并非所有文件都是这样,例如,我的同事获得了最新的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个回答

6

您在清单和内容上设置了哪些到期标头

如果您将vid/walkthrough.mov的到期时间设置为一个月后,并且该文件足够小,可以放入浏览器缓存(注意:不是应用程序缓存),则浏览器将从浏览器缓存中刷新应用程序缓存,而不是再次通过网络请求它(如果自从获取该文件以来不到一个月)。

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


1
谢谢!那么,只需在应用程序缓存中的所有文件上设置“Expires”标头为1994年,这样就足够好了吗?它仍然可以离线使用吗? - markasoftware

0
另一个解决方案,我正在使用的,但不太美观的方法是重命名appcache文件。然后所有内容都将被刷新,因为appcache将会丢失。

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