настройка экрана подтверждения загрузки onbeforeunload
-
20-09-2019 - |
Вопрос
Можно ли создать пользовательское окно подтверждения для события onbeforeunload в браузере?Я попытался, но затем я получаю 2 поля подтверждения (одно от меня, которое является не чем иным, как подтверждением возврата...а затем стандартный из браузера).
На данный момент мой код выглядит следующим образом:
var inputChanged = false;
$(window).load(function() {
window.onbeforeunload = navigateAway;
$(':input').bind('change', function() { inputChanged = true; });
});
function navigateAway(){
if(inputChanged){
return 'Are you sure you want to navigate away?';
}
}
Для этого я использую jQuery.
Решение
window.onbeforeunload = function (e) {
var message = "Your confirmation message goes here.",
e = e || window.event;
// For IE and Firefox
if (e) {
e.returnValue = message;
}
// For Safari
return message;
};
Пожалуйста, обратите внимание:Большинство браузеров помещают это сообщение после какого-либо другого текста.У вас нет полного контроля над содержимым диалогового окна подтверждения.
Другие советы
Нет, вы не можете избежать стандартного из браузера.Все, что вы можете сделать, это ввести в него какой-нибудь пользовательский текст;если вы используете следующий обработчик событий (зарегистрировали прототип lib способом):
Event.observe(window, "beforeunload", function(event) {
if (showMyBeforeUnloadConfirmation)
event.returnValue = "foo bar baz";
});
(и showMyBeforeUnloadConfirmation
верно) вы получите стандартное подтверждение браузера со следующим текстом:
Вы уверены, что хотите уйти с этой страницы?
фу бар база
Нажмите OK, чтобы продолжить, или Cancel, чтобы остаться на текущей странице.
[ ОК ] [ Отмена ]
Я столкнулся с той же проблемой, я смог получить собственное диалоговое окно с моим сообщением, но проблемы, с которыми я столкнулся, были:
- Он выдавал сообщение во всех навигациях, и я хотел, чтобы это было только для закрытия щелчка.
- С моим собственным сообщением о подтверждении, если пользователь выбирает "Отмена", он по-прежнему показывает диалоговое окно браузера по умолчанию.
Ниже приведен найденный мной код решения, который я написал на своей главной странице.
function closeMe(evt) {
if (typeof evt == 'undefined') {
evt = window.event;
}
if (evt && evt.clientX >= (window.event.screenX - 150) && evt.clientY >= -150 && evt.clientY <= 0) {
return "Do you want to log out of your current session?";
}
}
window.onbeforeunload = closeMe;