【问题标题】:HTML5 offline appcache: Force refresh of all content?HTML5 离线应用缓存:强制刷新所有内容?
【发布时间】:2012-09-16 23:03:16
【问题描述】:

我的小型 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);

【问题讨论】:

    标签: html offline-caching html5-appcache


    【解决方案1】:

    你在清单和内容上设置了什么expiry headers

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

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

    【讨论】:

    • 谢谢!那么在应用程序缓存中的所有文件上将Expires 标头设置为1994 就足够了吗?它仍然可以离线使用吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-09-12
      • 2021-09-27
      • 2012-01-01
      • 2010-11-15
      • 2015-05-05
      • 1970-01-01
      • 2011-08-03
      • 2016-11-25
      • 2012-03-06
      相关资源
      最近更新 更多