Кто-нибудь знает, 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 на верхней панели, изменяя местоположение в адресной строке и щелкая закладку.
Кто-нибудь знает, что происходит? Буду очень признателен за любой вклад.
благодаря
javascript
ios
ipad
onbeforeunload
Арт Самбрано
источник
источник
addEventListener()
?beforeunload
что не работает в Safari на iOS. :-( Возможно, это не то, что вы ищете, но у меня есть предложение, как надежно проверить работоспособностьbeforeunload
window.onbeforeunload = function(event) { event.returnValue = 'test'; }
не работает ни в Chrome, ни в Safari iOS 9.2.1. Мне очень нравится,onbeforeunload
потому что страница не меняется, если я нажимаю "Отмена".Ответы:
Я обнаружил, что событие onunload () действительно срабатывает. Его поведение несколько странное; все, что у вас есть в вашей функции обратного вызова, прикрепленной к событию, фактически запускается после загрузки новой страницы в фоновом режиме (вы еще не можете сказать, что она загружена, но регистрация сервера покажет, что она есть).
Что еще более странно, если у вас есть вызов confirm () в onunload () и пользователь щелкнул ссылку, чтобы перейти в другое место, значит, вы в деле. Если, однако, пользователь закрывает вкладку браузера iPad Safari, событие onunload () срабатывает, но в ответ на ваш confirm () будет неявная отмена.
источник
unload
мероприятие устарело в пользуpagehide
см. developer.apple.com/library/ios/documentation/AppleApplications/…Этот фрагмент 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! ... } );
источник
return 'test';
подобного оператору не работает ..Только компания Apple будет знать наверняка, но мне кажется, что они намеренно не включили эту функцию в мобильном Safari, так как он чаще всего используется тенистыми символов, чтобы заставить вас остаться на своем сайте или выскочит много порно / рекламных окон.
источник
В WebKit есть известная ошибка с onbeforeunload. Я считаю, что это исправлено в последней бета-версии Chrome 5, но вполне возможно, что браузер iPad создан на основе версии WebKit, в которой нет исправления.
Связанный отчет об ошибке Chrome .
источник
Событие beforeunload не поддерживается в Mobile Safari. Вы можете увидеть список всех поддерживаемых событий здесь: Обработка событий Документация Apple
А beforeunload нет в списке!
источник
https://code.google.com/p/chromium/issues/detail?id=97035
видеть слышать.
Я думаю, что предупреждения, подсказки, подтверждения и другие подобные действия также больше не разрешены.
источник
Вот решение, которое должно работать во всех современных браузерах:
var unloaded = false; window.addEventListener("beforeunload", function(e) { if (unloaded) return; unloaded = true; console.log("beforeUnload"); }); window.addEventListener("visibilitychange", function(e) { if (document.visibilityState == 'hidden') { if (unloaded) return; unloaded = true; console.log("beforeUnload"); } });
Мобильные браузеры, как правило, не поддерживают,
beforeunload
потому что браузер может перейти в фоновый режим, не выгружая страницу, а затем быть убитым операционной системой в любое время.Большинство настольных браузеров содержат ошибку, из-
visibilityState
за которой не вызывается при выгрузке документа. Смотрите: здесь .Поэтому важно включить оба события, чтобы охватить все сценарии.
NB
Я использовал
console.log
вместо этогоalert
в моем примере, потому что онalert
будет заблокирован некоторыми браузерами при вызове изbeforeunload
илиvisibilitychange
.источник
Если вам просто нужно знать, осталась ли страница, вы можете использовать
document.unload
. Он отлично работает в браузерах ios. Если вы увидите в документации Apple, вы обнаружите, что она устарела, и они рекомендуют использовать document.pagehideисточник