Остановите перезагрузку собственного веб-приложения при открытии на iOS - PullRequest
29 голосов
/ 27 ноября 2010

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

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

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

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

Ответы [ 4 ]

10 голосов
/ 15 декабря 2010

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

2 голосов
/ 08 июля 2011

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

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

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

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

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


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

0 голосов
/ 15 июля 2011

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

У Мэтта Мэйта хорошая запись здесь:

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