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

Остановите собственное веб-приложение после перезагрузки при открытии на iOS

Я пытаюсь создать "родное веб-приложение", используя HTML + JS на iOS. Как вы можете знать, вы можете добавить такое приложение на рабочий стол, и оно будет более или менее выглядеть так же, как обычное родное приложение.

Однако, если я выхожу из такого приложения и снова его снова открываю, он снова загружает всю страницу. Это также происходит при переключении на такое приложение из другого через панель многозадачности.

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

В качестве примера вы можете добавить jqTouch-Demos отсюда на свой рабочий стол и протестировать его: http://jqtouch.com/preview/demos/main/

4b9b3361

Ответ 1

Вы можете сохранить состояние своего приложения в localStorage. При перезагрузке проверьте, запущено ли состояние, а затем восстановите приложение до того места, где оно было последним.

Ответ 2

Такая же проблема. В любом случае, если вы не хотите изобретать колесо, вы можете использовать такой инструмент, как PhoneGap (http://www.phonegap.com/). Встроенная оболочка веб-приложений со встроенным доступом к нескольким встроенным функциям. Кроме того, вы сохраняете приложение локально (быстро, безопасно), и вы можете, конечно, заряжать его;) Он под лицензией BSD или MIT.

Ответ 3

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

Мэтт Мойт имеет хорошую запись здесь:

http://matt.might.net/articles/how-to-native-iphone-ipad-apps-in-javascript/

В основном вы меняете тег html на этот

<html manifest="cache.manifest">

и напишите файл cache.manifest на сервере, который указывает, какие файлы должны храниться в кеше устройства и который должен быть перезагружен динамически из сети.

CACHE MANIFEST
local1.file
local2.file

NETWORK:
network1.php
network2.cgi

Вам также необходимо убедиться, что ваш веб-сервер обслуживает файлы .manifest с текстом/манифестом MIME, иначе это не сработает. Если вы используете apache, поместите в файл .htaccess следующее:

AddType text/cache-manifest .manifest

Ответ 4


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

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

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


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

Хитрость заключается в следующем:

// 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