Как я могу обнаружить завершение работы кэшированного приложения iPhone?

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

Если я работаю как веб-страница в Safari, window.onunload делает это за меня, но это событие не происходит при запуске с главного экрана.


person ghenne    schedule 25.01.2011    source источник
comment
Возможные дубликаты: stackoverflow.com/questions/4520143 stackoverflow.com/questions/4401764   -  person user123444555621    schedule 26.01.2011


Ответы (3)


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

Однако, если вы находитесь в веб-приложении, сохраненном на вашем домашнем экране (как вы описываете), тогда событие pagehide бесполезно для определения того, было ли веб-приложение закрыто.

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

function myLoadHandler(evt)
{
  if (evt.persisted) {
    alert('user returns to page from another tab');
    return;
  }
  alert('loading new page');
}

function myUnloadHandler(evt)
{
  if (evt.persisted) {
    alert('user goes to new tab');
    return;
  }
  alert('user truly leaves the page');
}

if ("onpagehide" in window) {
  window.addEventListener("pageshow", myLoadHandler, false);
  window.addEventListener("pagehide", myUnloadHandler, false);
} else {
  window.addEventListener("load", myLoadHandler, false);
  window.addEventListener("unload", myUnloadHandler, false);
}
person cruzanmo    schedule 08.06.2011

У меня есть ответ. Это не то, на что мы надеялись.

Техническое определение выгрузки из http://www.w3.org/TR/DOM-Level-2-Events/events.html:

Событие выгрузки происходит, когда реализация DOM удаляет документ из окна или фрейма. Это событие действительно для элементов BODY и FRAMESET.

Я также получил ответ от некоторых знакомых в Apple: «К сожалению, мне не удалось найти событие, которое срабатывает при нажатии кнопки« Домой »! Я думаю, что наиболее подходящим событием для этого может быть событие pagehide. Это событие действительно срабатывает в Safari на iOS, когда вы переключаетесь в режим «вкладки», чтобы открыть новую страницу, но не когда вы щелкаете значок главного экрана :-( "

person ghenne    schedule 03.02.2011

В iOS3 или на неподдерживаемых устройствах / приложениях с многозадачностью вы можете выполнять уборку в методе applicationDidTerminate.

В iOS4 и устройствах / приложениях, поддерживающих многозадачность, вы можете выполнять уборку в методе applicationDidEnterBackground. Лучше всего реализовать метод applicationDidTerminate на тот случай, если iOS решит удалить ваше приложение из памяти, applicationDidTerminate будет вызываться в вашем приложении.

Ваше здоровье.

person Seyther    schedule 26.01.2011
comment
Речь идет о веб-приложении на javascript, а не о нативном приложении Objective-C. - person David Gelhar; 26.01.2011
comment
обнаружить, что приложение закрывается - вводящая в заблуждение фраза - person Seyther; 26.01.2011