Отменить обработчик события onbeforeunload?

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

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

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

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

3 ответов


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

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

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

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


не сразу связан с этим вопросом (пожалуйста, не понижайте из-за этого), но может помочь кому-то, тем не менее, это то, что я использую в Angular 1.x и TypeScript:

this.$window.onbeforeunload = () => null;

jQuery ≥ 1.7

С jQuery 1.7 далее API событий был обновлен .связывать./)(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');