我正在尝试为一个非常大(约2千兆字节)的Web应用程序创建一个HTML5应用程序缓存,该应用程序将在Windows 8 Professional平板电脑和IE10内部使用。有些事情导致缓存过程失败,但我能找到的唯一调试信息是F12控制台,它只是说“AppCache致命错误”。
我做了一个错误处理程序并尝试调试:
if (window.applicationCache)
{
var oAppCache = window.applicationCache;
oAppCache.onerror = function(e) {
alert(e); // Outputs [object Event], I use this row as a breakpoint target
};
}
但是,使用调试器查看时,e
不包含任何有用信息。
根据Web服务器日志,错误之前请求的最后一个文件是JPEG,就像许多其他文件一样。我应该从哪里开始寻找导致错误的原因的线索?该页面缓存在Firefox上。
答案 0 :(得分:9)
在一段时间内对付同样的问题。我二进制切碎了我的清单,直到找出导致错误的那一行:它是 CACHE条目的第1000行(不仅仅是清单的第1000行)。
似乎IE10中缓存中的项目数量存在硬性限制。几分钟后,我没有在任何地方找到这个记录,但是我敢说有些人可能会更加坚持下去。
我确认第1000个CACHE项目的内容并不重要; IE只是阻止你完全开始缓存下载。这可能是出于安全原因的限制,阻止某人充斥缓存,或者通过向页面中注入包含数千个条目的清单来将其用于DoS站点。
也许尝试将您的应用分成不同缓存的块(在子域上?)。如果以块的形式下载,可能会提供更好的用户体验,您可以通过在一系列较小的缓存之间重定向来自动执行“安装”。
答案 1 :(得分:7)
为了记录:我在IE(10)给我AppCache Fatal Error
时遇到了麻烦。事实证明,IE要求清单以适当的内容类型提供,即
Content-Type: text/cache-manifest
Chrome和Firefox并不挑剔。
答案 2 :(得分:3)
如果它对任何人有帮助,我找到了另一种方法来纠正这个错误。
如果您正在使用应用程序缓存并将html文件的Cache-Control标头设置为cache.manifest条目为“Cache-Control:no-cache,no-store”,则会收到此错误。删除Cache-Control标头的no-store标志将解决此实例中的问题。我试图仅将资源应用程序缓存用于资源,而不是用于html页面本身,但不幸的是,这不是它的设计目的。
另请注意,所有其他浏览器都会忽略cache.manifest中文件的no-store标志,而IE在技术上做得更为恰到好处。
答案 3 :(得分:1)
Internet Explorer组策略将缓存资源列表大小的限制设置为1000个项目。可以通过更改此策略来扩展此功能。可以找到更多here,部分“设置最大应用程序缓存资源列表大小”。
答案 4 :(得分:0)
我的问题是,IIS使用.manifest
- 扩展并将Content-Type
设置为x-ms-manifest
。所以我在web.config中添加了以下内容 - 这解决了fatal error
(IE 11)和 appcache现在可以使用它之前没有的HTTPS(SSL)(仅适用于HTTP):
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="."
inheritInChildApplications="false">
<system.webServer>
...
<staticContent>
<remove fileExtension=".manifest"/>
<mimeMap fileExtension=".manifest" mimeType="text/cache-manifest"/>
</staticContent>
...
</system.webServer>
</location>
</configuration>