Есть ли способ использовать window.onbeforeunload на Mobile Safari для устройств iOS? - PullRequest
41 голосов
/ 08 ноября 2010

Похоже, Apple отключила событие window.onbeforeunload для устройств iOS (iPhone, iPad, iPod Touch). К сожалению, я не могу найти документацию о том, почему это событие не работает в Mobile Safari.

Кто-нибудь знает, есть ли надежная альтернатива этой функции? Браузер Android, похоже, прекрасно его поддерживает, а настольное приложение Safari также поддерживает событие onbeforeunload без проблем.

Ответы [ 2 ]

17 голосов
/ 04 октября 2014

Я вижу, что это старый вопрос, но я недавно столкнулся с этой проблемой.

Я использую window.unload, и он отлично работает в браузерах ios (хотя, если вы посмотрите на документацию Apple , она устарела и рекомендует использовать document.pagehide)

1 голос
/ 24 апреля 2011

Если вам это действительно нужно, вы не можете просто получить все ссылки, формы и DOM-объекты, у которых есть обработчик, изменяющий URL, и заставляющий их ждать, пока вы не сделаете то, что хотите. Для ссылок вы получаете их с помощью getElementsByTagName, проверяете, начинается ли href с чего-либо, кроме #, и просто добавляете свою функцию onbeforeunload add onclick (которая будет вызываться до того, как href будет просматриваться). То же самое для форм, но с отправкой. И наконец, для элементов, изменяющих href с помощью JavaScript, вы должны убедиться, что при добавлении lsitener, который вы вызываете своей функцией onbeforeunlaod (или, если вы используете прослушиватели DOM0 или DOM1, вы можете просто добавить некоторый класс и затем использовать глобальный скрипт который проверяет все элементы класса и добавляет его к слушателю события с закрытием.

Но, как правило, вы должны избегать использования этого события (возможно, с помощью файлов cookie для хранения того, что вы хотите отправлять каждые x секунд, и, в худшем случае, сможете посмотреть на него при следующей загрузке пользователя). страницу и, в лучшем случае, сможет отправлять Ajax-запрос при onbeforeunload или onunload, который, даже если он отправляет только заголовки http, woudl позволит вам получить то, что вы хотите).

...