Window.onbeforeunload не работает на iPad?
Кто-нибудь знает, поддерживается ли событие onbeforeunload
на iPad и/или если есть другой способ его использования?
Я пробовал почти все, и кажется, что событие onbeforeunload
никогда не запускается на iPad (браузер Safari).
В частности, это то, что я пробовал:
-
window.onbeforeunload = function(event) { event.returnValue = 'test'; }
-
window.onbeforeunload = function(event) { return 'test'; }
- (оба выше вместе)
-
window.onbeforeunload = function(event) { alert('test')'; }
- (все вышеперечисленные функции, но внутри
<body onbeforeunload="...">
Все эти работы работают на FF и Safari на ПК, но не на iPad.
Кроме того, после загрузки страницы я сделал следующее:
alert('onbeforeunload' in window);
alert(typeof window.onbeforeunload);
alert(window.onbeforeunload);
Соответственно, результаты:
Итак, у браузера есть свойство, но по какой-то причине оно не срабатывает.
Пути, с помощью которых я пытаюсь перейти от страницы, - это щелкнуть кнопки "Назад" и "Вперед", выполнив поиск в верхней панели в Google, изменив местоположение в адресной строке и нажав на закладку.
Кто-нибудь имеет представление о том, что происходит? Я бы очень признателен за любые материалы.
Спасибо
Ответы
Ответ 1
Я обнаружил, что событие onunload() срабатывает. Это поведение несколько странно; все, что у вас есть в вашей функции обратного вызова, прикрепленной к событию, фактически запускается после того, как новая страница загрузилась в фоновом режиме (вы не можете сказать, что она загружена еще, но регистрация сервера покажет, что она есть).
Более странно, если у вас есть запрос confirm() в вашей onunload(), и пользователь нажал ссылку, чтобы перейти в другое место, вы находитесь в бизнесе. Если, однако, пользователь закрывает вкладку браузера iPad Safari, событие onunload() будет срабатывать, но ваш confirm() будет иметь неявное отмена в качестве ответа.
Ответ 2
Этот бит JavaScript работает для меня в Safari и Chrome на ipad и iphone, а также на рабочем столе/ноутбуке/других браузерах:
var isOnIOS = navigator.userAgent.match(/iPad/i)|| navigator.userAgent.match(/iPhone/i);
var eventName = isOnIOS ? "pagehide" : "beforeunload";
window.addEventListener(eventName, function (event) {
window.event.cancelBubble = true; // Don't know if this works on iOS but it might!
...
} );
Ответ 3
Только компания Apple будет знать наверняка, но мне кажется, что они намеренно не включили эту функцию в мобильном Safari, так как он чаще всего используется тенистыми символов, чтобы заставить вас остаться на своем сайте или выскочит много порно/реклама окна.
Ответ 4
Там известная ошибка в WebKit с onbeforeunload. Я считаю, что исправлено в последней бета-версии Chrome 5, но вполне возможно, что браузер iPad сделан из версии WebKit, у которой нет исправления.
Связанный отчет об ошибке Chrome.
Ответ 5
https://code.google.com/p/chromium/issues/detail?id=97035
см. услышать.
Предупреждения больше не разрешены во время событий увольнения страницы (beforeunload, unload, sash).
Я думаю, что оповещения, подсказки, подтверждения и другие действия, подобные этим, также больше не разрешены.
Ответ 6
Событие beforeunload не поддерживается Mobile Safari. Здесь вы можете увидеть список всех поддерживаемых событий: Обработка событий Документация Apple
И предыдущей загрузки нет в списке!
Ответ 7
Если вам просто нужно знать, осталась ли страница, вы можете использовать document.unload
. Он отлично работает в браузерах ios. Если вы видите в документацию Apple, вы обнаружите, что она устарела, и они рекомендуют использовать document.pagehide