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

StackOverflow https://stackoverflow.com/questions/1335727

Вопрос

Можно ли создать пользовательское окно подтверждения для события 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, чтобы остаться на текущей странице.

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

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

  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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top