настройка экрана подтверждения перед выгрузкой

Можно ли создать собственное окно подтверждения для события 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 для этого.


person Nyla Pareska    schedule 26.08.2009    source источник


Ответы (3)


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;
};

Обратите внимание: большинство браузеров помещают это сообщение после другого текста. У вас нет полного контроля над содержимым диалогового окна подтверждения.

person Eli Grey    schedule 26.08.2009
comment
Действительно, к сожалению, невозможно переопределить этот экран. - person Nyla Pareska; 27.08.2009

Нет, стандартного из браузера не избежать. Все, что вы можете сделать, это ввести в него какой-нибудь пользовательский текст; если вы используете следующий обработчик событий (зарегистрированный способ библиотеки прототипа):

Event.observe(window, "beforeunload", function(event) {
    if (showMyBeforeUnloadConfirmation)
        event.returnValue = "foo bar baz";
});

showMyBeforeUnloadConfirmation верно) вы получите стандартное подтверждение браузера со следующим текстом:

Вы уверены, что хотите уйти с этой страницы?

фу бар баз

Нажмите OK, чтобы продолжить, или Отмена, чтобы остаться на текущей странице.

[ ОК ] [ Отмена ]

person Justin Ludwig    schedule 26.08.2009

Я столкнулся с той же проблемой, мне удалось получить собственное диалоговое окно с моим сообщением, но проблемы, с которыми я столкнулся, были:

  1. Он выдавал сообщение о всех переходах, и я хотел, чтобы он был только для закрытия.
  2. С моим собственным подтверждающим сообщением, если пользователь выбирает «Отмена», он по-прежнему показывает диалоговое окно браузера по умолчанию.

Ниже приведен код решения, который я нашел, который я написал на своей главной странице.

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;
person Imran Rizvi    schedule 10.06.2011