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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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');