Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2


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

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

Ответ 3

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

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