JavaScript: Вы точно хотите покинуть страницу?

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

Решение нужно кроссбраузерное и при этом, чтобы окно не выводилось просто при рефреше страницы.

Если есть какой-то плагин для jQuery, то вообще замечательно. :)

Копать начал отсюда - но косяки начинаются уже с того, что выводится два диалоговых окна последовательно.
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .javascript.geshi_code {font-family:monospace;} .javascript.geshi_code .imp {font-weight: bold; color: red;} .javascript.geshi_code .kw1 {color: #000066; font-weight: bold;} .javascript.geshi_code .kw2 {color: #003366; font-weight: bold;} .javascript.geshi_code .kw3 {color: #000066;} .javascript.geshi_code .co1 {color: #006600; font-style: italic;} .javascript.geshi_code .co2 {color: #009966; font-style: italic;} .javascript.geshi_code .coMULTI {color: #006600; font-style: italic;} .javascript.geshi_code .es0 {color: #000099; font-weight: bold;} .javascript.geshi_code .br0 {color: #009900;} .javascript.geshi_code .sy0 {color: #339933;} .javascript.geshi_code .st0 {color: #3366CC;} .javascript.geshi_code .nu0 {color: #CC0000;} .javascript.geshi_code .me1 {color: #660066;} .javascript.geshi_code span.xtra { display:block; }

window.onbeforeunload = function (){
  if(confirm('Да неужели?')){
    return true;
  } else {
    return false;
  }
}
 


P.S. Это блажь заказчика. ИМХО мучать человека при уходе со страницы - зло. :)

1 ответов



window.onbeforeunload = function(e) {
    var msg = 'Да неужели?';
    if(typeof e == "undefined")
        e = window.event;
    if(e)
        e.returnValue = msg;
    return msg;
}
 
Будет ли событие срабатывать при рефреше, закрытии страницы, нажатии на кнопку "назад" в браузере или при других событиях, зависит от конкретного браузера.

Приведённый выше код и любой другой, решающий Вашу задачу, в Опере работать не будет, а в FF есть баг http://habrahabr.ru/post/141793/ (свой текст вставить не получится). И поделать с этим ничего нельзя!

Что касается Вашей ситуации с заказчиком, я бы посоветовал объяснить заказчику, что подобная "фича" будет только раздражать пользователей. Расскажите об альтернативных способах не дать пользователям потерять ценную информацию. В общем, не жалейте время на общение с заказчиком, для ваших отношений это только плюс.

Если всё же будут настаивать - опишите ситуацию, дайте официальные ссылки на особенности работы описанных выше браузеров. Объясните, почему кроссбаузерное решение не существует.

confirm - не надо!


$(window).bind('beforeunload', function(e) {
                if(!$.browser.mozilla){ //В firefox не показываем, так как беспонтово, своё сообщение там не вывести.
                    return "Внимание! \n\
Вы собираетесь покинуть  страницу. \n\n\
Подумайте еще раз!\n"
;
                }
            });