Как узнать, что вызывает фатальную ошибку AppCache в IE10?

Я пытаюсь создать кэш приложений HTML5 для очень большого (около 2 гигабайт) веб-приложения, которое будет использоваться внутри на планшете 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.

5 ответов


ударился головой о тот же вопрос на некоторое время. Я двоично рубил свой манифест, пока не понял, какая строка вызывает ошибку: это была 1000-я строка записи кэша (не только 1000-я строка манифеста).

кажется, есть жесткий предел количества элементов, которые вы можете иметь в кэше в IE10. Я нигде не нашел этого документа после нескольких минут поиска, но я осмелюсь сказать, что кто-то более настойчивый может его выловить.

I проверено, что не имеет значения, каково содержимое 1000 - го элемента кэша; IE просто предотвращает прямое начало загрузки кэша. Это может быть ограничение по соображениям безопасности, остановив кого-то, затопляющего кэш, или используя его для DoS сайта, вводя манифест с тысячами записей на страницу.

возможно, попробуйте разделить приложение на куски (над поддоменами?) с разными тайниками. Может улучшить пользовательский интерфейс, если он загружается кусками, вы можете всегда автоматизируйте "установку", перенаправляя между сериями меньших кэшей.


для записи: у меня были проблемы с IE (10), давая мне AppCache Fatal Error. Оказывается, IE требует, чтобы манифест подавался с соответствующим типом контента, то есть

Content-Type: text/cache-manifest

Chrome и Firefox не так придирчивы.


в случае, если это кому-то поможет, я нашел другой способ исправить эту ошибку.

Если вы используете кэш приложения и установите заголовок Cache-Control для html-файла с кэшем.запись манифеста в "Cache-Control: no-cache, no-store", вы получите эту ошибку. Удаление флага no-store для заголовка Cache-Control устранит проблему в этом случае. Я пытался использовать кэш приложения только для ресурсов, а не для самой html-страницы, но, к сожалению это не то, для чего он был предназначен.

также обратите внимание, что все остальные браузеры будут просто игнорировать флаг no-store для файлов в кэше.манифест, в то время как IE технически делает правильную вещь, будучи немного более педантичным.


групповая политика Internet explorer устанавливает ограничение размера списка ресурсов кэша до 1000 элементов. Это может быть расширено путем изменения этой политики. Больше можно найти здесь, часть "установить максимальный размер списка ресурсов кэша приложений".


моя проблема заключалась в том, что IIS использовал .manifest-расширение и установить Content-Type to x-ms-manifest. Поэтому я добавил в сеть следующее.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>