【问题标题】:How can I find out what causes AppCache Fatal Error on IE10?如何找出导致 IE10 上 AppCache 致命错误的原因?
【发布时间】:2013-05-27 09:06:39
【问题描述】:

我正在尝试为一个非常大(大约 2 GB)的 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 不包含有用的信息。

根据网络服务器日志,错误之前请求的最后一个文件是 JPEG,就像许多其他文件一样。我应该从哪里开始寻找导致错误的线索?该页面在 Firefox 上缓存良好。

【问题讨论】:

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


    【解决方案1】:

    一段时间以来,我一直在同一个问题上苦苦挣扎。我对清单进行了二进制处理,直到找出导致错误的行:它是 CACHE 条目 的第 1000 行(不仅仅是清单的第 1000 行)。

    似乎在 IE10 的缓存中可以拥有的项目数量存在硬性限制。经过几分钟的搜索,我还没有在任何地方找到此文档,但我敢说更坚持不懈的人可能会对其进行搜索。

    我验证了第 1000 个 CACHE 项的内容是什么无关紧要; IE 只是阻止您直接开始缓存下载。这可能是出于安全原因的限制,阻止某人淹没缓存,或者通过将包含数千个条目的清单注入页面来使用它来 DoS 站点。

    也许可以尝试将您的应用拆分为具有不同缓存的块(通过子域?)。如果分块下载可能会带来更好的用户体验,您始终可以通过在一系列较小的缓存之间重定向来自动“安装”。

    【讨论】:

    • 子域拆分是个好主意,尽管由于站点是单页的,所以很难实现。除了 1000 个缓存条目限制之外,似乎还有 50MB 的限制,这似乎是我们案例的罪魁祸首。如果不是因为巨大的视频,1000 项限制无论如何都会咬我们,所以我会接受这个答案。谢谢!
    • 很好看。 IE10 的详细信息为 here,并确认清单中的 50MB 限制和最多 1000 个资源。
    【解决方案2】:

    郑重声明:我在 IE (10) 给我AppCache Fatal Error 时遇到了麻烦。事实证明,IE 需要使用正确的内容类型来提供清单,即

    Content-Type: text/cache-manifest
    

    Chrome 和 Firefox 没有那么挑剔。

    【讨论】:

    • 这是对我的修复。对于 IIS,将 <mimeMap fileExtension=".manifest" mimeType="text/cache-manifest" /> 添加到 web.config 的 <staticContent> 部分。
    • 由于某些奇怪的原因,这似乎也导致了 mouseenter/leave 角度错误
    【解决方案3】:

    如果它对任何人有帮助,我找到了另一种方法来纠正这个错误。

    如果您正在使用应用程序缓存并将带有 cache.manifest 条目的 html 文件的 Cache-Control 标头设置为“Cache-Control: no-cache, no-store”,您将收到此错误。删除 Cache-Control 标头的 no-store 标志将解决此实例中的问题。我试图将应用程序缓存仅用于资源,而不是用于 html 页面本身,但不幸的是,这不是它的设计目的。

    另外请注意,所有其他浏览器只会忽略 cache.manifest 中文件的 no-store 标志,而 IE 在技术上做正确的事,因为它有点迂腐。

    【讨论】:

      【解决方案4】:

      Internet Explorer 组策略将缓存资源列表大小限制设置为 1000 个项目。这可以通过更改此策略来扩展。更多内容见here,部分“设置最大应用缓存资源列表大小”。

      【讨论】:

        【解决方案5】:

        我的问题是,IIS 使用了.manifest-Extension 并将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>
        

        【讨论】:

          猜你喜欢
          • 2014-04-06
          • 1970-01-01
          • 2013-10-14
          • 2016-11-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-08
          相关资源
          最近更新 更多