странное поведение с использованием cache.manifest / offline веб-приложения, сохраненного на главном экране на ipad ios6

Я только что обнаружил странное поведение на 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 - к сожалению, все такое же поведение ...


person TimG    schedule 27.09.2012    source источник
comment
Я не могу подтвердить ошибку, так как для меня она работает должным образом, но я могу объяснить ограничение в 50 МБ. У Safari есть ограничения. По умолчанию в iOS 5 было 10 МБ, затем 25 МБ и 50 МБ. Так что, если ваше приложение меньше 10 МБ, никаких вопросов. Если это 15 МБ, было предложено увеличить лимит до следующего уровня (25 МБ), и, следовательно, если он равен 33, следующим уровнем будет 50 МБ, поэтому вам напрямую будет предложено установить этот предел в 50 МБ. На iOS 6 где-то читал, что теперь первый уровень 25МБ.   -  person Stefan    schedule 17.10.2012


Ответы (1)


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

Геолокация работает на первой итерации, но с тех пор не обновляется.

Геолокация и локальные данные iOS 6 Хранилище

"Данные в приложениях главного экрана теперь хранятся как собственные приложения. У каждого собственного приложения есть собственная песочница, в которой хранятся, резервные копии и восстанавливаются их данные. До iOS 6 приложения главного экрана обменивались данными с тем же приложением, которое запущено в браузере. . Если пользователь очистил кеш в браузере, версия приложения для домашнего экрана также потеряет свои данные. В iOS 6 данные приложений для домашнего экрана сохраняются в песочнице, как и собственные приложения. Резервное копирование и восстановление обрабатывают данные должным образом. , и очистка кеша в браузере на них не повлияет ".

person Anit Lacoul    schedule 04.10.2012
comment
Да, я тоже получил эту информацию (см. Ссылки, которые я разместил в своем вопросе). Но это не объясняет, почему cache.manifest не будет работать, как на ios5 для приложений домашнего экрана, или нужен ли cache.manifest вообще для приложений домашнего экрана на ios6, а если нет, то как хранятся данные для приложений домашнего экрана. теперь на ios6. Вот где я застрял прямо сейчас. Потому что, если приложения на домашнем экране сохранят свои данные в собственной песочнице, я бы ожидал, что у них больше не будет ограничений по размеру ... И что вы имеете в виду, говоря, что они полезны? У вас есть решение этой проблемы? - person TimG; 04.10.2012
comment
Можете ли вы протестировать это на бета-версии iOS 6.1? похоже, что Apple решила некоторые проблемы с cache.manifest. - person norman784; 11.12.2012