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



我试图获得HTML 5离线应用程序缓存与ASP MVC 3网站工作。我的问题是当我尝试在离线模式下导航到一个页面时,它不起作用。

我正在为manifest文件使用一个动作,以便它可以在我指定的视图中动态生成Resonse。ContentType = "text/cache-manifest".

我已经在IIS本地托管了应用程序,所以我使用http://192.168.55.127/mywebsite/来访问它。

这是我正在使用的manifest视图。它使用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}rn", "http://192.168.55.127", Url.Content(jsFile))
}
#Style Sheets
@foreach(var cssFile in Url.GetCssFiles())
{
     @string.Format("{0}{1}rn", "http://192.168.55.127", Url.Content(cssFile))
}
#Images
@foreach(var imageFile in Url.GetImageFiles())
{
     @string.Format("{0}{1}rn", "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

看起来很好。

我已经使用完整路径引用了manifest文件:

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

这似乎是ok的,因为当我加载网站在chrome浏览器和观察开发人员控制台,它出现缓存所有文件而不抛出任何错误。如果我导航到http://192.168.55.127/mywebsite/manifest它提供了我期望看到的清单。

该网站不使用正常的导航,而是使用散列片段导航-因此,导航到主页的url将是master.htm#home或对于选项,它将是master.html#options。这个哈希变化是由javascript捡起,它加载页面到主使用ajax的div容器,更具体地说,它使用jQuery的'load'方法来做到这一点。

这一切工作正常,当不在脱机模式,当观察网络标签在chrome浏览器导航时,请求URL是正确的,是在manifest文件中列出的相同的URL。我唯一能想到的是,离线模式不工作的ajax请求,但我的印象是,它的工作原理是一样的。

我正在使用FireFox(9.0版本)测试脱机模式:清除所有历史记录,浏览到网站主页,启用脱机模式,然后尝试导航到选项页面。在firebug中,我看到对选项页的正确URL的GET请求,但它从未返回,甚至没有错误。加载轮(在firebug的net选项卡中的请求旁边)只是继续转动,好像它仍在加载。我在Opera 11.60中也试过(因为它也有离线模式),同样的事情发生了。

有人知道我做错了什么吗?我是否错过了什么明显的东西或误解了清单应该如何工作?

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

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

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

AddType text/cache-manifest .manifest

到服务器的配置文件或你的。htaccess文件。

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

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

相关内容

  • 没有找到相关文章

最新更新