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);

Соответственно, результаты:

  • true
  • object
  • null

Итак, у браузера есть свойство, но по какой-то причине оно не срабатывает.

Пути, с помощью которых я пытаюсь перейти от страницы, - это щелкнуть кнопки "Назад" и "Вперед", выполнив поиск в верхней панели в 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, так как он чаще всего используется тенистыми символов, чтобы заставить вас остаться на своем сайте или выскочит много порно/реклама окна.

Ответ 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