Остановить перезагрузку веб-приложения, запущенного с главного экрана iPhone

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

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

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

3 Solutions collect form web for “Остановить перезагрузку веб-приложения, запущенного с главного экрана iPhone”

Я только что нашел этот связанный вопрос на 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

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


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

NB; это работает проще всего, если к страницам вашего веб-приложения всегда обращаются по одному URL-адресу (например, http://webapp.yourdomain.com/index.php ); если нет, вам нужно будет сохранить местоположение пользователя в данных сеанса на стороне сервера и перенаправить пользователя туда, когда он войдет в ваше веб-приложение по основному URL-адресу.

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


Простым решением является продление срока действия вашего cookie сеанса. Это работает через веб-приложения (при условии, что они указывают на одну и ту же страницу, конечно) и даже между веб-приложением и обычной веб-версией приложения.

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

Хитрость заключается в том, чтобы сделать это:

// Start or resume session session_start(); // Extend cookie life time by an amount of your liking $cookieLifetime = 365 * 24 * 60 * 60; // A year in seconds setcookie(session_name(),session_id(),time()+$cookieLifetime); 

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

Поддерживать сеанс PHP в веб-приложении на iPhone

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

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

  • Обнаружение перехода на новую вкладку в Mobile Safari
  • Интерактивная трехмерная модель без WebGL для iOS
  • Позиция мобильного сафари: фиксированный сбой z-index при прокрутке
  • Любой способ автоматизировать SFSafariViewController в тестах пользовательского интерфейса?
  • ios-webkit-debug-proxy blank devtools
  • iOS mobile: прокрутка в iFrame внутри прокручиваемого родителя
  • Есть ли способ использовать window.onbeforeunload для Mobile Safari для устройств iOS?
  • Изменить событие, не активирующее элементы выбора с помощью Mobile Safari «Помощник по форме»
  • Укажите значок значка веб-клипа по умолчанию iOS?
  • iOS7 и проблема с заставкой веб-приложения
  • Остановить прокрутку при использовании «-webkit-overflow-scrolling: touch»?
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.