8

我有一个带有注释的缓存清单

# Version 3.2

为了更新所有应用程序,我只需更改版本号。它有效,但是:

当我更新清单时,所有内容都会正确更新(新缓存已填充),但实际文件会从(旧)缓存中多花一次时间。当我重新加载两次时,一切都会更新。这种行为正确吗?使用铬 21。

谢谢

4

2 回答 2

17

是的,这是当前的“正确”行为。这就是发生的事情:

当您刚刚对清单文件进行更改并刷新浏览器时,会发生这种情况(假设您在线)

  • 浏览器首先加载回缓存中的所有文件
  • 然后浏览器在线检查您的清单文件
  • 它检测到清单文件已更改,然后将继续下载新文件
  • 但是,请记住,此时,您仍然会查看“旧文件”,因为浏览器在上线下载“新文件”之前已经加载了旧文件
  • 如果此时,如果您再次点击刷新(第二次),您应该获得“新文件”

这是目前的标准行为。有些人放了一些事件处理程序来提示用户进行另一次刷新(第一次刷新后)

就个人而言,我认为浏览器应该负责提醒用户在完成下载新文件后再次刷新,但现在,大多数人都会从“window.applicationCache”中放入事件处理程序来触发事件来帮助管理这一点。

要查看使用 window.applicationCache 的示例,请访问此处:http ://www.html5rocks.com/en/tutorials/appcache/beginner/

它在“更新缓存”部分下。

于 2012-11-08T05:01:49.527 回答
1

可以按此处所述立即交换缓存:

function updateSite(event) {
    window.applicationCache.swapCache();
}
window.applicationCache.addEventListener('updateready', updateSite, false);
于 2016-04-01T14:31:21.210 回答