2009-12-28 3 views
0

Когда пользователь выходит из одной страницы моего сайта, должно быть предупреждение, которое дает пользователю возможность остаться на странице:Спросите, является ли пользователь уверен покинуть сайт (XHTML/JavaScript)

«Вы уверены, что хотите закрыть эту страницу?»

Не имеет значения, является ли следующая страница внутренней или внешней страницей.

Я думал, что это может быть сделано с обработчиком событий onUnload, не так ли?

<body onunload="confirmClose()"> 

Функция confirmClose() должен затем показать окно с двумя кнопками, так что пользователь может выбрать между «Действительно оставить» или «Stay».

function confirmClose() { 
    return confirm('Really leave this page?') 
} 

Но эта функция не может остановить разгрузку, не так ли?

У вас есть решение проблемы? Заранее спасибо!

+6

У меня есть решение вашей проблемы: не попросить пользователя подтвердить оставить свой сайт. Это не что иное, как раздражение. –

+6

Для этого есть законное использование, например, когда пользовательский ввод будет потерян при выходе из страницы. –

+0

Я должен согласиться с вами обоими. Это действительно раздражает, но может быть полезно. Я хочу использовать его в адекватном случае, когда он предотвращает потерю данных пользователем. – caw

ответ

4

Вы можете добавить событие onbeforeunload. Обратите внимание, что он может только вернуть текстовую строку для включения в диалоговом окне, отображаемом браузером при вызове события. Вы не можете настроить диалог за его пределами, и вы не сможете запустить свой собственный confirm, как вы пытаетесь сделать.

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

+0

Большое спасибо! Все ответы были хорошими и полезными - но я должен выбрать один из лучших. ;) Поэтому я выбираю ваш. – caw

1

Браузер заботится о отображении окна подтверждения. Вам нужно вернуть строку с сообщением, которое вы хотите задать. Кроме того, вы можете использовать onbeforeunload для кросс-браузерной совместимости.

5

Вы можете предоставить только текст. Браузер обрабатывает диалоговое окно (соображения безопасности). Вот какой код вы можете использовать:

window.onbeforeunload = function (e) { 
    var e = e || window.event; 
    var msg = 'Are you sure you want to leave?'; 

    // For IE and Firefox 
    if (e) { 
     e.returnValue = msg; 
    } 

    // For Safari/chrome 
    return msg; 
} 

Попробуйте это в разных браузерах. Вы заметите, что сообщение должно быть построено по-разному в зависимости от диалога диалога различных браузеров.

Вот что я использую:

if (IsChrome) { 
    return 'You were in the middle of editing. You will lose your changes if you leave this page'; 
} else { 
    return 'You were in the middle of editing. Press OK to leave this page (you will lose your changes).'; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^