HTML5缓存清单是否也适用于ajax请求?

HTML5缓存清单是否也适用于ajax请求?,html,offline-caching,offline-mode,Html,Offline Caching,Offline Mode,我正在尝试使HTML5脱机应用程序缓存与ASP MVC3网站一起工作。我遇到的问题是 当我尝试在脱机模式下导航到某个页面时,它不起作用 我正在为清单文件使用一个操作,以便可以动态生成它,并且在我指定的视图中 Resonse.ContentType=“文本/缓存清单” 我在IIS中本地托管了该应用程序,因此我使用它来访问它 这是我正在使用的清单视图。它使用razor视图引擎,有点混乱(硬编码URL等) 当我试图找出问题的时候 @{ Layout = null; Response

我正在尝试使HTML5脱机应用程序缓存与ASP MVC3网站一起工作。我遇到的问题是 当我尝试在脱机模式下导航到某个页面时,它不起作用

我正在为清单文件使用一个操作,以便可以动态生成它,并且在我指定的视图中 Resonse.ContentType=“文本/缓存清单”

我在IIS中本地托管了该应用程序,因此我使用它来访问它

这是我正在使用的清单视图。它使用razor视图引擎,有点混乱(硬编码URL等) 当我试图找出问题的时候

@{
     Layout = null;
     Response.ContentType = "text/cache-manifest";
}
CACHE MANIFEST

# Version: @ViewBag.Version

CACHE:
#Script Files
@foreach(var jsFile in Url.GetJsFiles())
{
     @string.Format("{0}{1}\r\n", "http://192.168.55.127", Url.Content(jsFile))
}

#Style Sheets
@foreach(var cssFile in Url.GetCssFiles())
{
     @string.Format("{0}{1}\r\n", "http://192.168.55.127", Url.Content(cssFile))
}

#Images
@foreach(var imageFile in Url.GetImageFiles())
{
     @string.Format("{0}{1}\r\n", "http://192.168.55.127", Url.Content(imageFile))
}

#HTML Pages
@string.Format("{0}{1}", "http://192.168.55.127", Url.Content("~/pages/master.htm"))
@string.Format("{0}{1}", "http://192.168.55.127", Url.Content("~/pages/home.htm"))
@string.Format("{0}{1}", "http://192.168.55.127", Url.Content("~/pages/options.htm"))

NETWORK:
*
这将导致以下路径:

http://192.168.55.127/mywebsite/scripts/Libs/jQuery.js
http://192.168.55.127/mywebsite/pages/home.htm
看起来不错

我也使用完整路径引用了清单文件:

<html manifest="http://192.168.55.127/mywebsite/manifest">

这似乎还可以,当我在chrome中加载站点并观察开发人员控制台时,它出现了 缓存所有文件而不引发任何错误。如果我导航到 它提供了我希望看到的清单

该网站不使用常规导航,而是使用散列片段进行导航-因此,要导航到主页,url应该是master.htm#home,或者对于选项,url应该是master.html#options。这个散列更改由javascript获取,它使用ajax将页面加载到master中的div容器中,更具体地说,它使用jQuery中的“load”方法来实现这一点

当不处于脱机模式时,这一切都可以正常工作,当导航时观察chrome中的网络选项卡时,请求URL是正确的,并且与清单文件中列出的URL相同。我能想到的唯一一件事是离线模式对ajax请求不起作用,但我的印象是它也起作用

我正在使用FireFox(9.0版)测试离线模式,清除所有历史记录,浏览网站主页,启用离线模式,然后尝试导航到选项页面。在firebug中,我看到一个获取选项页面正确URL的请求,但它从未返回,甚至没有错误。加载轮(firebug中“网络”选项卡中的请求旁边)一直在转动,就好像它仍在加载一样。我也在Opera11.60中尝试过(因为它也有离线模式),同样的事情也发生了

有人知道我做错了什么吗?我是否错过了一些明显的东西或误解了清单应该如何工作?如果您有任何建议,我们将不胜感激。

(我知道这个问题很老,但仅供将来参考…)

如果AJAX内容文件正确地列在AppCache清单文件中(看起来是这样的),那么这应该可以工作。就个人而言,我会使用相对路径而不是绝对路径,但这不会有什么区别

您的问题似乎是清单文件没有文件扩展名。尝试将文件(及其在master.htm中的引用)重命名为
appcache.manifest
或类似文件。然后,您需要确保在服务器中设置了清单文件的MIME类型。例如,对于Apache,您可以添加如下内容:

AddType text/cache-manifest .manifest
到服务器的配置文件或.htaccess文件

此外,除了在测试时清除缓存数据外,还应确保在更改清单文件时至少刷新页面几次,因为浏览器会在单独的页面加载中检查更新和下载文件

最后,如果使用AJAX拉入的文件在URL中有参数,例如?id=1234,但没有在清单文件中列出,那么它将不起作用。这里的情况似乎不是这样,但这是需要注意的