JQuery Отключить все перенаправления (ссылки, сообщения в форме, изменения окна и т.д.)

Можно ли использовать javascript для отключения любого кода, который отвлечет браузер от текущей страницы?

Я пробовал следующий код, но он не работал:

$(window).unload(function(e){
    event.stopPropagation();
    event.preventDefault();
    return false;
});

Я предполагаю, что этот код не работает, потому что к моменту выгрузки() он слишком поздно.

Любые другие идеи?

Возможные реализации: 1. отключить любой код, который перенаправляет 2. привязать ко всем элементам, которые могут это сделать (ссылки, формы, что еще мне не хватает?)

Ответ 1

Вы можете вывести сообщение в браузере, в котором спрашивают пользователя, хотят ли они покинуть страницу. Это работает на каждом событии, которое заставляет браузер покидать текущую страницу (даже представить формы и закрыть браузер).

Страница тестирования: http://dl.dropbox.com/u/3937673/test.html

JavaScript:

window.onbeforeunload = function(e){
  var e = e || window.event;
  // For IE and Firefox (prior to 4)
  if (e){
    e.returnValue = 'Do you want to leave this page?';
  }
  // For Safari and Chrome
  return "Do you want to leave this page?";
};

Или с помощью jQuery:

$(window).bind('beforeunload', function(){
    return "Do you want to leave this page?";
});

Ответ 2

Просто привяжите его ко всем элементам, которые могут его запустить,

var stopLeaving = function(e){
    return confirm('Are you sure you want to leave this page?');
};

$('form').submit(stopLeaving);
$('a').click(stopLeaving);

Ответ 3

это должно быть:

$(window).unload(function(e){
e.stopPropagation();
e.preventDefault();
return false;
});

но это не сработает.

цитата из api.jquery.com:

После выполнения этого кода предупреждение будет отображаться всякий раз, когда браузер покидает текущую страницу. Невозможно отменить событие разгрузки с помощью .preventDefault(). Это событие доступно, так что скрипты могут выполнять очистку, когда пользователь покидает страницу.

http://api.jquery.com/unload/

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