如何找出IE10上导致AppCache致命错误的原因?

时间:2013-05-31 13:58:08

标签: debugging internet-explorer-10 html5-appcache

我正在尝试为一个非常大(约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上。

5 个答案:

答案 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>