我有一个缓存清单,里面有一个注释
# Version 3.2
为了更新所有的应用程序,我只需更改版本号。它有效,但是:
当我更新清单时,所有内容都会正确更新(新的缓存已填充),但实际文件会从(旧的)缓存中再占用一次时间。当我重新加载两次时,所有内容都会更新。这种行为正确吗?使用铬21。
感谢
是的,这是当前的"正确"行为。这就是发生的事情:
当你刚刚对清单文件进行更改,并刷新浏览器时,就会发生这种情况(假设你在线)
- 浏览器首先加载回缓存中的所有文件
- 然后浏览器在线检查您的清单文件
- 它检测到清单文件已更改,然后将继续下载新文件
- 但是,请记住,此时您仍将查看"旧文件",因为浏览器在联机下载"新文件"之前已加载了旧文件
- 如果此时,如果你再次点击刷新(第二次),你应该得到"新文件">
这是目前的标准行为。有些人放置一些事件处理程序来提示用户进行另一次刷新(在第一次刷新之后)
就我个人而言,我认为浏览器应该负责提醒用户在下载完新文件后再次刷新,但现在,大多数人都从"window.applicationCache"中放入事件处理程序来触发事件以帮助管理这一点。
要查看使用window.applicationCache的示例,请转到此处:http://www.html5rocks.com/en/tutorials/appcache/beginner/
它在"更新缓存"部分下。
可以立即交换缓存,如下所述:
function updateSite(event) {
window.applicationCache.swapCache();
}
window.applicationCache.addEventListener('updateready', updateSite, false);