ОБНОВЛЕНИЕ: я написал это 5 лет назад, браузеры теперь делают разные вещи, вы все еще можете использовать это для тестирования вашего браузера, но ваш опыт может отличаться от моего старого исследования.
Экспериментирую с использованием jQuery, потому что я ленивый.
Теоретически, предотвращение поведения по умолчанию должно мешать событию делать то, что оно должно делать. Он не работает с событиями в моем примере и имеет разные результаты в разных браузерах. Я вставил Math.random (), чтобы определить, была ли страница перезагружена или нет. Поскольку разные браузеры делают разные вещи, я настоятельно рекомендую НЕ использовать это в производственной среде.
<body>
<p></p>
<script type="text/javascript">
$('p').append(Math.random());
$(window).bind({
beforeunload: function(ev) {
ev.preventDefault();
},
unload: function(ev) {
ev.preventDefault();
}
});
</script>
</body>
Использование CTRL-R или F5 или кнопки перезагрузки:
- Safari: ничего не делает
- Chrome: ничего не делает
- Опера 10 и 11: ничего не делает
- Firefox 7.x: показывает специальную подсказку с двумя кнопками:
- Оставаться на странице - страница не перезагружается
- Покинуть страницу - Перезагрузить страницу
- IE7 и IE8: показывает подсказку с двумя кнопками:
- OK - перезагрузка страницы
- Отмена - не перезагружает страницу
- IE9: показывает подсказку с двумя кнопками:
- Покинуть эту страницу - перезагрузить
- Оставайтесь на этой странице - не перезагружается
Приглашение Firefox (вы можете сказать, что я тестировал его на Mac)
IE7 & IE8 Prompt
IE9 Prompt
В заключение:
Да, я не тестировал IE6, я удалил свою виртуальную машину, на которой она была установлена, у меня нет виртуальной машины с установленной бета-версией IE10, поэтому вам тоже не повезло.
Вы также можете поэкспериментировать с cancelBubble и stopPropagation или, возможно, вернуть false; может раскрыть что-то полезное. Я не согласен с ответом Джордана о том, что вы не должны пытаться переопределить значения по умолчанию, поэтому я заканчиваю свой эксперимент здесь.