ASP.NET清单文件脚本未刷新

时间:2011-04-04 07:22:36

标签: ipad asp.net-mvc-3 manifest offline

我与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数字需要递增。即便如此,当我测试时,我需要刷新页面几次才能重新加载文件。我怀疑浏览器加载和处理资源有什么要做的顺序,但我找不到任何信息。

1 个答案:

答案 0 :(得分:2)

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

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

您可以检测新缓存何时就绪并刷新页面以使用此javascript立即开始使用它:

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

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