Хороший ресурс для обучения молодых людей является бесплатной электронной книгой, "Изобретают собственные игры с Python":
Это определенно ошибка FF. Я сообщил об этом на https://bugzilla.mozilla.org/show_bug.cgi?id=531199
Установите переменную в обработчике, чтобы диалоговое окно не появлялось во второй раз. Затем используйте setTimeout, чтобы сбросить его.
Создайте глобальную переменную, для которой установлено значение true внутри обработчика. Показывать предупреждение / всплывающее окно, только если эта переменная имеет значение false.
Лучшее решение, которое я нашел, - использовать глобальную переменную flag, которая сбрасывается через столько миллисекунд, скажем, 500 (это гарантирует, что функция может быть позвонил еще раз, но не сразу после его появления).
См. Последний код в:
<script type="text/javascript">
var onBeforeUnloadFired = false;
window.onbeforeunload = function ()
{
if (!onBeforeUnloadFired) {
onBeforeUnloadFired = true;
event.returnValue = "You have attempted to leave this page. If you have made any changes to the fields without clicking the Save button, your changes will be lost. Are you sure you want to exit this page?";
}
window.setTimeout("ResetOnBeforeUnloadFired()", 10);
}
function ResetOnBeforeUnloadFired() {
onBeforeUnloadFired = false;
}
</script>