Вопрос JavaScript: Onbeforeunload или Onunload? - PullRequest
19 голосов
/ 23 сентября 2010

Поэтому я хочу сохранить некоторую информацию в локальном хранилище браузера, когда страница обновляется или пользователь покидает страницу для будущего использования. Я решил использовать Javascript для обнаружения события и сохранения состояния посещения страницы.

Теперь мое затруднительное положение: использовать ли методы Onbeforeunload или Onunload для достижения этой цели?

Спасибо

Ответы [ 4 ]

20 голосов
/ 23 сентября 2010

Почему бы не зарегистрировать его с обоими, чтобы быть в безопасности?Просто попросите слушателя проверить, сохранены ли еще данные, и завершите работу рано.

Вот краткий пример использования свойств события:

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

  var didMyThingYet=false;

  return function(){
    if (didMyThingYet) return;
    didMyThingYet=true;
    // do your thing here...
  }

}());

Или вы можете использовать attachEvent:

(function(){

  var didMyThingYet=false;

  function listener (){
    if (didMyThingYet) return;
    didMyThingYet=true;
    // do your thing here...
  }

  window.attachEvent("onbeforeunload", listener);
  window.attachEvent("onunload", listener);    

}());
8 голосов
/ 24 сентября 2010

Надлежащим местом для этого является onunload. onbeforenload предназначен для использования, когда вам может понадобиться остановить пользователя, когда он покидает страницу, например, при наличии несохраненных данных.

Я бы устал писать код для всех случаев, потому что вы не готовы тестировать все случаи. Если вы проводите исследования и обнаруживаете, что это слишком сложно для всех браузеров, то да, сделайте все возможное. Тем не менее, я считаю, что нет проблем с выполнением локального хранилища при загрузке. Я действительно столкнулся с проблемой, пытаясь отправить информацию на сервер при загрузке. Это не произошло надежно во всех браузерах, поэтому я в итоге применил подход, который использовал как unload, так и beforeunload, но только после надлежащей проверки.

Поэтому я предлагаю сделать это при загрузке, проверьте все ваши браузеры.

0 голосов
/ 17 августа 2011

Из моего опыта: используйте onunload, так как Opera не поддерживает другое событие.Да, я знаю ... Опера ... но все же:)

0 голосов
/ 23 сентября 2010

Я считаю, что Onbeforeunload - безопасная ставка. Браузер может не выполнить скрипт onunload полностью - например, если у вас есть предупреждение в onunload, chrome не будет отображаться, если вы закроете окно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...