2010-11-27 2 views
29

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

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

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

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

+0

Смотрите мой ответ здесь : http://stackoverflow.com/a/40707231/473637 – Jeshurun 2016-11-20 17:48:04

ответ

9

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

+0

Я решил проблему, создав приложение WebView, которое скомпилировано для iOS 4.2 и поэтому поддерживает многозадачность. Это отлично работает для меня. – cguedel 2010-12-19 22:05:07

+0

Я думаю, что предложение Генна, вероятно, является лучшим решением в настоящее время. – 2011-08-04 14:46:05

+0

Как сохранить состояние cookie/сеанса? – Chetan 2011-08-11 07:49:54

2

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

0

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

Matt Might имеет хорошую рецензию здесь:

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 
0

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

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); 

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

Maintain PHP Session in web app on iPhone