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. Это блажь заказчика. ИМХО мучать человека при уходе со страницы - зло. :)
Решение нужно кроссбраузерное и при этом, чтобы окно не выводилось просто при рефреше страницы.
Если есть какой-то плагин для 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";
}
});