Я только что обнаружил странное поведение на iPad с новой iOS 6. Я тестирую веб-приложение для автономного использования. Веб-приложение представляет собой не более чем статический веб-сайт с манифестом кеша, поэтому не используются специальные фреймворки, такие как sencha touch, или инструменты, такие как phnoegap. Только HTML, CSS, JavaScript и cache.manifest.
Раньше приложение работало нормально: я мог сохранить сайт на главном экране. Когда я открою его оттуда, все данные будут загружены для кеширования. В конце загрузки всплывающее окно спрашивало, хочу ли я увеличить кеш до 50 МБ - принято - все в порядке - автономное использование работает.
Теперь после обновления до iOS 6: я внес некоторые изменения в приложение. Удалил приложение с домашнего экрана. Открыл снова в мобильном сафари. Сохранено на главный экран. При открытии загрузка начинается как положено. Но потом зависает на 99%. Когда я смотрю его в консоли, я получаю сообщение об ошибке: «Не удалось обновить кэш приложения, поскольку превышена квота размера».
И вот что происходит странно: когда я открываю его в браузере, начинается загрузка, и в конце меня спрашивают, хочу ли я увеличить размер кеша до 50 МБ. Подтверждаю конечно. Когда я теперь смотрю в настройках сафари на «данные веб-сайта», я вижу, что все кэшированные данные для этого приложения составляют около 33 МБ !! Так что совсем не больше 50 МБ!
Это ошибка iOS6? У кого-нибудь возникали проблемы с кешированием данных при сохранении веб-сайта на домашний экран после обновления до iOS 6? Спасибо за любую помощь, так как я действительно застрял здесь ... Не нашел ничего полезного в Интернете ...
(К сожалению, я не могу разместить ссылку на веб-приложение и / или его файлы).
РЕДАКТИРОВАТЬ:
Я нашел дополнительную информацию по этой проблеме:
http://www.nsbasic.com/blog/?p=928
По-видимому, wep-приложения, сохраненные на главном экране, теперь обрабатываются как собственные приложения, то есть каждый экземпляр одного и того же веб-приложения, сохраненный на главном экране, получает свою собственную «песочницу хранилища». Таким образом, данные не зависят от данных, сохраненных в мобильном Safari. Это означает, что если вы удалите все данные веб-сайта мобильного сафари, это не повлияет на веб-приложение, сохраненное на главном экране (до ios6 они использовали одни и те же данные).
Я тоже нашел это:
iOS 6 не работает с GeoLocation в веб-приложениях (с поддержкой apple-mobile-web-app)
Хотя это не совсем та же тема, это могло быть связано. Очевидно веб-приложения, сохраненные на главном экране с помощью
<meta content="yes" name="apple-mobile-web-app-capable" />
не сможет использовать геолокацию. Геолокация работает, только если вы удалите этот метатег из своего веб-приложения. Возможно, это тоже решение проблемы с кешированием, я пока не смог его протестировать. Но опять же: может быть, cache.manifest больше не нужен, если веб-приложения, сохраненные на главном экране, обрабатываются больше как нативные приложения? Я сообщу здесь, если узнаю больше.
РЕДАКТИРОВАТЬ2:
Хорошо, после некоторого тестирования и никаких полезных советов ни из Интернета, ни из Apple, я кое-что обнаружил: когда я удаляю
<meta content="yes" name="apple-mobile-web-app-capable" />
с сайта, конечно, все работает нормально, потому что это как если бы вы открывали Safari и там у меня пока не было проблем. Поэтому меня интересует, чтобы он работал без браузера Chrome. Как описано выше, кеширование достигает 99%, а затем я получаю ошибку превышения квоты на размер кеша. Затем я просто закрыл приложение на главном экране и снова открыл его. Теперь загрузка из кеша начинается снова и завершается нормально! Ни зависаний, ни ошибок! И вроде все хранится локально. Сегодня я смог протестировать его только на симуляторе iPad, но надеюсь, что смогу подтвердить это, как только смогу достать наше устройство позже.
Таким образом, похоже, что вместо того, чтобы вас спросить, хотите ли вы увеличить размер кеша, вы получаете ошибку превышения квоты размера кеша. Возможно, из-за того, что хранилище данных для приложений на домашнем экране теперь обрабатывается по-другому, вам больше не нужно вручную увеличивать размер кеша (что, конечно, является чистым предположением). Тем не менее, если это так, то никакой ошибки быть не должно. Поэтому вместо того, чтобы вас просили увеличить размер кеша, вам нужно дважды открыть приложение на главном экране, что, кстати, довольно неудачный обходной путь ...
РЕДАКТИРОВАТЬ3:
Я просто мог подтвердить это поведение на реальном устройстве: сохранено на главном экране -> открыто с домашнего экрана -> загрузка для кэширования файлов -> ошибка превышения квоты размера кеша в конце -> закрыть приложение на главном экране (нажмите кнопку домой) - > снова откройте его -> чтобы файлы были закешированы снова -> на этот раз без ошибок -> все, что можно использовать в автономном режиме.
Я также тестировал его на устройстве с iOS 5, и там он работает, как и ожидалось, без ошибок. Так что это определенно проблема iOS 6.
Может ли кто-нибудь еще подтвердить это поведение или ошибку?
РЕДАКТИРОВАТЬ4:
Иногда у меня была возможность протестировать это на iOS 6.1.3 - к сожалению, все такое же поведение ...