Firefox 4 onBeforeUnload пользовательское сообщение


В Firefox 3, я смог написать пользовательское всплывающее окно подтверждения с:

window.onbeforeunload = function() {
   if (someCondition) {
      return 'Your stream will be turned off';
   }
}

теперь в Firefox 4, он не показывает мое пользовательское сообщение. Сообщение по умолчанию, которое он предоставляет, даже не соответствует тому, что делает мое приложение.

можно ли переопределить это сообщение по умолчанию?

4   68  

4 ответа:

с MDN:

обратите внимание, что в Firefox 4 и более поздних версиях возвращенная строка не отображается пользователю. Смотрите Баг 588292.

эта "ошибка" на самом деле (imho сомнительная) функция.. так что нет никакого способа, чтобы отобразить сообщение в Firefox 4. Если вы думаете, что это должно быть изменено, прокомментируйте эту ошибку, чтобы разработчики Firefox знали, что люди действительно хотят иметь возможность показывать пользовательскую строку.

дополнение к приведенному выше ответу, я улучшил обходной путь.

я использовал jquery здесь. вы также можете использовать функцию javascript по умолчанию.

$(window).bind('beforeunload', function() {
    if(/Firefox[\/\s](\d+)/.test(navigator.userAgent) && new Number(RegExp.) >= 4) {
        if(confirm("Are you Sure do you want to leave?")) {
            history.go();
        } else {
            window.setTimeout(function() {
                window.stop();
            }, 1);
        }
    } else {
        return "Are you Sure do you want to leave?";
    }
});

протестировано и работает в Firefox 11, а также. :)

мой обходной путь-показать предупреждение в onbeforeunload:

window.onbeforeunload=function() {
    if ( /Firefox[\/\s](\d+)/.test(navigator.userAgent) && new Number(RegExp.) >= 4) {
        alert("Blah blah. You have to confirm you are leaving this page in the next dialogue.");
    }
    return "Blah blah."; 
} 

(показывает два диалога в Firefox, один диалог в другом месте.)

попробуйте реализовать его с сообщением подтверждения,

window.onbeforeunload=function(){
   return confirm("Are you sure??");
}

конечно, когда пользователь подтверждает, то сообщение FF4 отображается, поэтому вам, возможно, лучше отобразить это один раз на сайте при входе/посещении. Печенье должно сделать трюк.