Используя манифест кеша и много проблем, я могу надежно кешировать все приложение;Обратите внимание, что это одностраничное приложение с несколькими отдельными файловыми ресурсами.
В качестве дальнейшего улучшения я пытался изменить DOM на основе
window.applicationCacheстатус
для информирования пользователя об обновлениях, например:
нажмите здесь, чтобы применить обновление
Если бы это было возможно, я мог бы поменяться местамикеш
window.applicationCache.swapCache ();
, что позволило бы мне поменяться местами в обновленном кеше и затем перезапустить страницу, чтобы обеспечить упорядоченный механизм обновления.
Потенциально даже более упорядоченный, чем приложения из Apple Store.
Я подозреваю, что API applicationCache был затруднен Apple, чтобы препятствовать веб-приложениям именно по этой причине.Сказав это, я считаю, что уровень поддержки API «html5» на мобильных устройствах является одним из самых надежных в яблочном сафари.
Ниже приведены некоторые проблемы, которые я заметил до сих пор, в произвольном порядке.Обратите внимание, что это не полный список ошибок.
Я никогда не получаю событие 'updateready';эта строка предупреждения никогда не запускается:
window.applicationCache.addEventListener('updateready', function(e) {
alert('updateready event status=' + window.applicationCache.status );
}, false);
Я не могу вручную проверить наличие обновлений.Следующий код дает мне исключение
try{
window.applicationCache.update();
}catch (err){
alert('exception:\n' + err);
}
Кажется, что, как только я вообще начинаю взаимодействовать с состоянием кэша, кэширование перестает работать.Ошибки - изумительно неуловимы;выявление и изоляция любой проблемы может занять много времени, тем более что весь этот код работает безупречно в других браузерах (chrome).
Теперь вот хороший вариант: я подозреваю, что если вы прикрепите приложение к своемуНа главном экране iCloud «резервирует» ресурсы и восстанавливает их после первого запуска приложения с главного экрана.Чтобы избежать этой проблемы, вам иногда может понадобиться переименовать файлы.Я доказал, что Apple делает дискретные резервные копии устаревших компонентов,
полностью удаляя их с моего сервера приложений
, удаляя закрепленные веб-приложения с домашнего экрана
, очищая все кеши
открытие URL-адреса приложения в Safari
Убедитесь, что его новейшая версия
привязана к домашней странице
Убедитесь, что закрепленное приложение является новейшей версией
закройте его
запустите снова - и вернитесь к старому, которого больше нет на вашем сервере.
Наконец, если вы запустите закрепленное приложение, когда телефон находится в режиме полета, iCloudне сможет восстановить устаревшие файлы.Это доказывает, что это исходит из воздуха.