Как я могу обнаружить отключение кэшированного приложения iPhone? - PullRequest
0 голосов
/ 25 января 2011

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

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

Ответы [ 3 ]

1 голос
/ 09 июня 2011

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

Однако, если вы находитесь в веб-приложении, сохраненном на вашем домашнем экране (как вы описали), то событие 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);
}
0 голосов
/ 03 февраля 2011

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

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

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

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

0 голосов
/ 26 января 2011

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

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

Cheers.

...