我与MV一起使用MV来创建一个IPad应用程序。其中一个关键要求是应用程序在离线模式下工作。因此,我使用清单文件来确定缓存的脚本文件。但是,我希望在浏览器再次联机时刷新所有脚本。我通过以下方式指定了这个:
Network:
*
在我的脚本下面的清单文件中。但这不起作用,因为在线刷新浏览器时某些文件未更新。此外,如果我在chrome中检查开发人员工具,控制台会显示以下事件:
Application Cache Checking event
Application Cache NoUpdate event
我猜这意味着浏览器尝试更新缓存但未找到更新。
有什么想法吗?
请参阅下面的完整清单文件:
CACHE MANIFEST
#rev20
# Explicitly cached entries
../css/sencha-touch.css
../Site.css
../css/mycss.css
../css/application.css
../../Scripts/SenchaTouch/sencha-touch-debug-w-comments.js
../../Scripts/js/Base/Index.js
../Images/Icons/green_indicator.png
../Images/Icons/red_indicator.png
../Images/toolbar_image.png
../Images/search_icon.png
../Images/loading.gif
NETWORK:
*
编辑:
我最初的想法是文件一旦更改就会自动更新。但是,因为浏览器依赖清单文件来通知它进行更改(我认为),所以当发生更改时,#rev
数字需要递增。即便如此,当我测试时,我需要刷新页面几次才能重新加载文件。我怀疑浏览器加载和处理资源有什么要做的顺序,但我找不到任何信息。
答案 0 :(得分:2)
浏览器只会在检测到缓存清单发生更改时才更新缓存。增加修订号是强制改变的好方法。
浏览器检测到更改后,会下载文件并准备新版本的缓存。浏览器在完全填满并刷新页面之前不会使用新缓存。
您可以检测新缓存何时就绪并刷新页面以使用此javascript立即开始使用它:
function updateCache(){
window.applicationCache.swapCache();
window.location.reload();
}
window.applicationCache.addEventListener("updateready", updateCache, false);