Отменить обработчик события onbeforeunload? - PullRequest
19 голосов
/ 08 июня 2011

У меня есть обработчик события onbeforeunload, прикрепленный к странице, который выполняется каждый раз, когда страница перезагружается / перенаправляется.

window.onbeforeunload = function() {
  console.log("do something");}

Я не хочу, чтобы этот скрипт запускался во время моих тестов. Я хочу отключить его в моей собственной тестовой среде.

Есть ли способ отменить привязку этого события onbeforeunload? Я использую JavaScript с jQuery в качестве основы, поэтому ответ в jQuery был бы хорошим.

Ответы [ 3 ]

34 голосов
/ 09 июня 2011

В JavaScript функции могут быть перезаписаны.Вы можете просто назначить ему новое назначение:

window.onbeforeunload = function () {
  // blank function do nothing
}

Это полностью перезапишет существующую версию window.onbeforeunload.

Примечание. Почему бы вам просто не удалить строку кода, котораяставит эту функцию на первое место?Или, если вы не можете, вам придется установить эту пустую функцию после того, как она была определена, просто чтобы убедиться, что она не переопределена снова

1 голос
/ 20 декабря 2016

Не имеет непосредственного отношения к этому вопросу, но, тем не менее, может кому-то помочь. Это то, что я использую в Angular 1.x и TypeScript:

this.$window.onbeforeunload = () => undefined;
0 голосов
/ 06 апреля 2017

jQuery ≥ 1.7

В версии jQuery 1.7 API событий обновлено, .bind () /. Unbind () по-прежнему доступны для обратной совместимости, но предпочтительным методом является использование on () /функции off ().Ниже будет теперь,

$('#myimage').click(function() { return false; }); // Adds another click event
$('#myimage').off('click');
$('#myimage').on('click.mynamespace', function() { /* Do stuff */ });
$('#myimage').off('click.mynamespace');
...