Я протестировал событие 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);
}