Я думаю, что нашел решение. Это, вероятно, будет работать для других.
Я разделил загрузчик на два отдельных файла HTML: один, который использует XMLHttpRequest, чтобы получить все необходимые файлы и поместить их в localStorage (загрузчик), а другой, который просто читает файлы из localStorage и записывает их в документ (загрузчик ) с соответствующими обертками (например). У загрузчика есть файл манифеста, который хранит его в кэше приложения. Загрузчик нет. Пользователь сначала вызывает загрузчик. Если загрузчик находит файлы уже в localStorage, он делает свое дело. В противном случае он использует location.replace () для вызова загрузчика. Загрузчик загружает файлы с сервера с помощью XMLHttpRequest и помещает их в localStorage, а затем повторно вызывает загрузчик с помощью location.replace (). Кажется, это не вызывает ошибку сети.
Чтобы работать в автономном режиме, пользователь должен вызвать загрузчик в браузере iPhone Safari (который вызывает загрузчик, который повторно запускает загрузчик), который загружает WebApp. В Safari пользователь должен затем добавить WebApp (ссылку на загрузчик) на свой главный экран (с помощью кнопки «+» внизу). В автономном режиме пользователь может получить доступ к приложению с помощью значка главного экрана. Повторная визуализация занимает несколько секунд, но после этого она становится полностью функциональной. Это та же задержка, когда онлайн. Вызов ссылки из браузера iPhone Safari не будет работать в автономном режиме, хотя он будет работать в Интернете.
Загрузчик отслеживает событие «updateready» кэша приложения, чтобы при подключении к сети и при обнаружении iPhone изменения файла манифеста загрузчика и загрузке нового загрузчика он заменял новый кэш (window.applicationCache.swapCache ()) и снова вызовите загрузчик с помощью location.replace (). Я также добавляю alert (), чтобы пользователь знал, что происходит что-то интересное. Таким образом, изменение файла манифеста (я имею в виду изменение некоторых байтов, а не просто изменение времени изменения) приведет к тому, что клиенты будут получать новые файлы при подключении к сети.
Интересно, что я заметил, что localStorage, настроенный в Safari, недоступен для той же страницы, что и при вызове значка Начального экрана, даже если файлы cookie передаются! Таким образом, при первом запуске загрузчика с иконки он перезагрузит файлы, даже если они были ранее загружены в Safari. Кроме того, мне пришлось явно запретить кэширование загрузчика, поскольку он не перезагружался с сервера, когда обновлялись остальные файлы.