2011-04-04 62 views
3

我正在使用MVC与JS一起创建一个iPad应用程序。其中一个关键要求是应用程序在离线模式下工作。因此我使用清单文件来确定缓存的脚本文件。但是,我希望在浏览器再次联机时刷新所有脚本。我已经指定了这个:未刷新ASP.NET清单文件脚本

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

嗨,你这个随时随地? - 我有同样的问题... – Journeyman 2011-05-03 17:04:24

+0

@Journeyman。是和不是。见上面的编辑 – sTodorov 2011-05-05 07:53:36

回答

2

浏览器只会在检测到缓存清单发生更改时更新缓存。增加您的修订版本号是强制更改的好方法。

浏览器检测到更改后,它会下载文件并准备新版本的缓存。浏览器在完全填满并刷新页面之前不会使用新缓存。

,可以检测何时新缓存准备和刷新开始使用它立即使用这个JavaScript页面:

function updateCache(){ 
    window.applicationCache.swapCache(); 
    window.location.reload(); 
} 

window.applicationCache.addEventListener("updateready", updateCache, false);