Остановите перезагрузку веб-приложения, запущенного на главном экране iPhone - PullRequest
68 голосов
/ 03 августа 2011

Я создал веб-приложение и добавил его на домашний экран iPhone.Когда я переключаюсь на другое приложение и возвращаюсь, iPhone автоматически перезагружает мое веб-приложение.Это нарушает мой поток приложений.

Как запретить iPhone перезагружать приложение?

У меня включен метатег apple-mobile-web-app, позволяющий скрыть панель инструментов Safari, и я не хочу его отключать.

Ответы [ 4 ]

16 голосов
/ 04 августа 2011

Я только что нашел этот связанный вопрос на SO: Остановите самозагрузку собственного веб-приложения при открытии на iOS

Поскольку это кажется ограничением Safari, предлагаемое решение - сохранить состояние ваших веб-приложений, используя Javascript и HTML5 localStorage. Когда ваше веб-приложение будет запущено, проверьте постоянное состояние и загрузите его, если доступно.

Вы можете прочитать об использовании localStorage в Safari здесь: http://developer.apple.com/library/safari/#documentation/iPhone/Conceptual/SafariJSDatabaseGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007256-CH1-SW1

Надеюсь, это поможет вам. По крайней мере, это было для меня, так как у меня была такая же проблема, как и у вас. : -)

1 голос
/ 13 октября 2018

Я нашел хак, протестирован на iOS 11.4.1/12.0
Откройте окно загрузки файла и затем переключитесь обратно на домашний экран.
Приложение все еще продолжает работать, в моем случае звук воспроизводится и localStorageобновление

Пруфы: https://youtu.be/heehLUhGKYY

PS.обратите внимание, как прогресс в песне меняется, когда мы ищем, это доказывает, что приложение работает в фоновом режиме

0 голосов
/ 19 октября 2017

Короткий ответ: вы не можете это контролировать.Иногда iOS будет держать веб-приложение активным в фоновом режиме, в других случаях оно будет убивать его.Это полностью связано с тем, сколько памяти доступно на устройстве.

Итак, ваш лучший подход - минимизировать проблемы, возникающие при такой перезагрузке.Убедитесь, что ваше веб-приложение обновляет URL-адрес при переходе от просмотра к просмотру, либо изменив location.hash или используя history.pushState().Это позволит вам перезагрузить любой вид, который был у пользователя до того, как он переключил приложения.Существуют pagehide и pageshow события , которые позволяют вам выполнять код, когда пользователь отходит от вашего приложения - используйте эту возможность для сохранения локального состояния в localStorage и / или IndexedDB, а затем извлекайте эти данные сновакогда веб-приложение будет открыто.

0 голосов
/ 30 января 2013

Обновление: , поскольку этот ответ получает отрицательные голоса, я добавил это объяснение.

Возможно, ваша проблема не в фактической перезагрузке, а в том, что Mobile Safari по-разному обрабатывает кэш и файлы cookie вашего пользователя, когда ваше веб-приложение открывается через браузер, чем когда оно «устанавливается» как веб-приложение надомашний экран.Хотя предложенные здесь решения, использующие localStorage, будут работать, они требуют много работы для логики на стороне клиента, которой можно избежать, если ваш сервер уже отвечает за сохранение состояния сеанса вашего пользователя.30-секундное решение состоит в том, чтобы просто явно установить cookie-файл сеанса на более длительный срок службы.

Это позволяет сохранить состояние без изменений даже между перезагрузками устройства, поэтому технически не останавливает веб-приложение.после перезагрузки при запуске с домашнего экрана это простой способ восстановить состояние для пользователя, не заметив перезагрузку - во многих случаях я подозреваю, что это реальная проблема.


Для более подробного обсуждения этой стратегии и примеров кода, посмотрите на эти вопросы и мои ответы там:

...