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:),我的意思是在内容更改时随时更新。

奇怪的是,一些文件被更新了。并非全部,例如,一位同事获得了最新的 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);
4

2 回答 2

6

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

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

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

于 2012-09-25T13:20:13.477 回答
0

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

于 2017-06-02T18:20:00.830 回答