Ошибки кеша приложения Mobile Safari? - PullRequest
4 голосов
/ 15 июня 2010

Я использую файл манифеста кэша Mobile Safari для хранения многостраничного приложения для ввода данных, которое запускается на iPod Touch (версия 3.1.3) в автономном режиме. Приложение выполняет запись в базу данных на стороне клиента с помощью persistence.js ORM. Это все отлично работает.

Тем не менее, я сталкиваюсь со случайной, чрезвычайно сложной для воспроизведения проблемой, когда Safari, кажется, просто забывает, что страницы кэшируются. Когда это происходит, появляется предупреждение «Не удается открыть страницу», которое появляется при попытке зайти на некешированный веб-сайт с отключенным Wi-Fi. Единственный способ, который я нашел, чтобы исправить это, это повторно подключиться к беспроводному сигналу и зайти на сайт в режиме онлайн, что, похоже, исправляет кэш. Это легко сделать, когда ты в офисе, но не так легко сделать в поле.

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

1 Ответ

2 голосов
/ 27 марта 2012

Используя манифест кеша и много проблем, я могу надежно кешировать все приложение;Обратите внимание, что это одностраничное приложение с несколькими отдельными файловыми ресурсами.

В качестве дальнейшего улучшения я пытался изменить 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не сможет восстановить устаревшие файлы.Это доказывает, что это исходит из воздуха.

...