2012-05-31 2 views
1

Я использую этот скрипт, чтобы предотвратить перезагрузку и обратную навигацию по странице страницы, чтобы сообщить пользователю о том, будет ли он уходить, внесенные изменения будут потеряны.onbeforeunload loops and hangs Firefox

В Firefox проблема возникает только при нажатии кнопки «Назад». Отображается диалоговое окно оповещения, и он просто продолжает циклический возврат, если вы нажмете «остаться» или «уйти», и вы должны заставить закрыть Firefox.

Есть ли лучший сценарий для этого, который фактически работает в FF?

window.onbeforeunload = function (e) { 
    e = e || window.event; 

    if (e) { 
     e.returnValue = message; 
    } 

    return message; 
}; 
+0

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

+0

Необходимо. И он отлично работает в Chrome и Safari. Я хочу сообщить пользователю; если он/она уйдет, сделанные изменения будут потеряны. И пользователь может выбрать оставить или остаться. – user1121487

+0

Хорошо, единственная ошибка, когда вы нажимаете 'back' в firefox? Напишите точное ожидаемое поведение в вопросе, и вы, скорее всего, получите хорошие ответы. –

ответ

2

Этот код работает для меня в Firefox и Chrome:

<script type="text/javascript"> 
window.onbeforeunload = confirmExit; 
function confirmExit() 
{ 
    return "Are you sure you want to leave?"; 
} 
</script> 
+0

Теперь он начал снова зацикливаться/висит ... – user1121487

+0

Возможно, это ошибка в браузере, вы изменили код? Если да, обновите свой код в своем сообщении, чтобы я мог снова взглянуть :) –

+0

Спасибо. Это тот же код, я использую его внутри функции, но я тоже пробовал ее вне функции. Похоже, что если вы перезагрузите страницу и нажмите «Оставить» в предупреждении, а затем нажмите кнопку «Назад назад», диалог начнет цикл. Если вы нажмете «остаться» в этой точке несколько раз, вы можете сломать цикл, но если вы нажмете «уйти», цикл продолжится, а затем он просто отобразит диалоговое окно без информации только отменить и кнопку ok, а FF потребуется сила уволиться. – user1121487