HTML5应用缓存:清单已更新但文件仍从应用缓存中获取

9

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

# Version 3.2

为了更新所有应用程序,我只需更改版本号。它可以工作,但是:
当我更新清单时,一切都会正确更新(新缓存被填充),但实际文件仍从(旧)缓存中取出一个以上的时间。当我重新加载两次时,一切都会更新。这种行为正确吗?使用 Chrome 21。
谢谢
2个回答

18

是的,这是当前“正确”的行为。具体如下:

当您刚刚更改了清单文件并刷新浏览器时,以下内容会发生(假设您在线)

  • 浏览器首先从缓存中加载所有文件
  • 然后,浏览器检查您的清单文件是否在线
  • 它检测到清单文件已更改,然后会开始下载新文件
  • 但是,请注意,在此时,您仍将查看旧文件,因为浏览器在上网下载“新文件”之前已加载旧文件
  • 如果此时再次刷新(第二次),则应该获得“新文件”

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

个人认为浏览器应该负责在下载完新文件后提醒用户进行另一个刷新,但现在大多数人都从“window.applicationCache”中放置事件处理程序来帮助管理此问题。

要查看使用window.applicationCache的示例,请转到:http://www.html5rocks.com/en/tutorials/appcache/beginner/

它位于“更新缓存”部分。


1

可以按照这里所述的方式立即交换缓存。

function updateSite(event) {
    window.applicationCache.swapCache();
}
window.applicationCache.addEventListener('updateready', updateSite, false);

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