Подтвердить что ты не робот

Разница между onbeforeunload и onunload

В чем разница между onbeforeunload и onunload? Также у меня есть конкретный вопрос, связанный с его использованием на iPad... У меня есть страница (myPage.html), где я пытаюсь показать предупреждение, когда страница закрыта (т.е. X нажата, чтобы закрыть вкладку на iPad)

Теперь я попытался использовать как window.onunload, так и window.onbeforeunload Ниже приведены мои результаты на iPad;

  • Используя window.onunload, я могу получить предупреждение, когда пользователь перейдет на другую страницу из myPage.html(либо нажав на какую-либо ссылку, либо выполнив поиск Google, находясь на myPage.html). Однако ничего не происходит, когда вкладка закрыта из минимизированного представления (X)

  • Используя window.onbeforeunload, я не получаю предупреждение, даже если пользователь переходит на другую страницу из myPage.html ИЛИ, если он закрывает вкладку (X) из свернутого представления.

Я хотел знать, есть ли альтернативный способ исправить эту проблему?

Спасибо.

4b9b3361

Ответ 1

onunload отвечает за выполнение команды, когда страница закрыта. Это также вызывает проблемы с IE и AJAX.

onbeforeunload более эффективен, потому что он не работает в конкуренции с фактическим закрытием окна и запускается до onunload

Я знаю, что Opera не признавала onbeforeunload - не уверен, что они исправили это, но я всегда регистрирую слушателя как безопасный:

window.onunload = window.onbeforeunload = (function(){...

Ответ 2

Добавление с помощью AlienWebguy ans, чтобы избежать двойных вызовов в браузерах, поддерживающих оба события,

var onBeforeUnLoadEvent = false;

window.onunload = window.onbeforeunload= function(){
if(!onBeforeUnLoadEvent){
  onBeforeUnLoadEvent = true;
  //your code here
  }
};

Ответ 3

Одна существенная разница (кроме отмены) между onbeforeunload и onunload заключается в том, что первая запускается для ссылок загрузки, а вторая - нет. Пример: <a href="https://somewhere.com/thething.zip">download</a> запускает обработчик onbeforeunload, но не onunload.

Ответ 4

onbeforeunload:

  • Вызывается перед началом разгрузки
  • MDN говорит мне, вы можете отменить закрытие страницы с помощью event.preventDefault();
  • или возвращая значение не-void (т.е. значение!= 0), на странице появится диалоговое окно подтверждения, которое позволяет пользователю выбрать отмену закрытия
  • MDN также говорит, что Opera 12 и поддержка onbeforeunload - похоже, что она поддерживается на некоторое время сейчас

onunload:

  • Вызывается после разгрузки, но перед любым освобождением ресурса (его непонятно мне, что именно делается за этот период)
  • Слишком поздно закрыть страницу в этот момент

Единственная причина, по которой я могу подумать, почему вы хотите использовать onunload over onbeforeunload, будет где ваш код onunload может занять некоторое значительное время и не хочет, чтобы пользователь видел окно, зависающее при закрытии.