Метод abort () может быть ответом ... когда-нибудь , но я еще не встречал браузеров, которые его реализуют.
У меня была похожая проблема, и я попробовал все, включая дикую идею поместить манифест внутрь себя, чтобы посмотреть, кешируется ли он сам. Так что я мог бы делать обновления вручную с помощью запросов ajax и оценки javascript, вставленного в localStorage ... yikes.
Наконец, я создал очень простую HTML-страницу с простым манифестом. Когда я проверял это, пользовательский интерфейс не блокировался. Постепенно я начал добавлять вещи на страницу и поиграться с содержимым манифеста, чтобы увидеть, что может вызвать его зависание во время проверки applicationCache. Я наконец-то потерпел неудачу, когда добавил изображение на страницу, но оставил его вне манифеста - тогда пользовательский интерфейс снова начал блокироваться. Я вернулся к своему первоначальному проекту и нашел несколько изображений, которые должны были быть в манифесте, и это также исправило проблему с пользовательским интерфейсом блокировки.
На этапе проверки applicationCache пытается быть асинхронным (по крайней мере, на устройствах, которые я тестировал). Однако если в манифесте отсутствуют какие-либо файлы, то все должно ждать, пока applicationCache завершит проверку .
Похоже, что когда браузеру нужен файл, который не был кэширован, он ожидает, пока applicationCache завершит обновление, прежде чем он сделает запрос на файл - что имеет смысл, поскольку другие ресурсы могут полагаться на отсутствующий файл. Это тормозит рендеринг и заставляет пользовательский интерфейс зависать. Если манифест недоступен (например, в другой сети), пользовательский интерфейс может быть заблокирован примерно на минуту.
Чтобы найти файлы, которые необходимо добавить в манифест, просмотрите журналы сервера, когда вы обновите приложение несколько раз. Подозреваемыми будут любые запросы GET на файлы, отличные от манифеста.