Захват ответа пользователя при использовании window.onbeforeunload

Есть ли способ зафиксировать, нажал ли пользователь OK или CANCEL?

Мне нужно сделать что-то ТОЛЬКО, если пользователь покидает страницу....

Ответы

Ответ 1

Вот решение, которое я использую в ситуации, когда мне нужно что-то сделать (например, очистить сеанс) ТОЛЬКО, когда пользователь переходит со страницы.

У меня есть 2 глобальных vars

var clearSession = true;
var confirmExit = true;


    window.onbeforeunload = function() { return confirmExit(); }
    window.onunload = function() { return clearSession(); }

function confirmExit() {
    if (needToConfirm == true) {       

        return "exit page?";
    }
}


function clearSession() {

     if (clearSession == true) {
        alert("Killing the session on the server!!!");
        PageMethods.ClearSession();
    }
}

Тогда, конечно, на каждой странице submit/button/drop down и т.д. вам нужно убедиться, что для указанных выше глобальных переменных установлено значение false.

Надеюсь, это поможет кому-то.

Ответ 2

Нет, браузеры позволяют указывать только текст в поле оповещения, но никак не поймать результат.

Ответ 3

Вы можете использовать один setTimeout для проверки.

window.onbeforeunload = function() {
    if (needToConfirm) {
        setTimeout(function() {
            alert('User still is on the page');
        }, 0);
        return 'Are you sure you want to leave?';
    }
};

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

Ответ 4

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

У меня есть веб-страница (в ней есть форма), сидящая на локальной системе, которая должна быть защищена от неавторизованных пользователей от ввода каких-либо входов к ней.

Я создал функцию JavaScript, которая загружается вместе с загрузкой главной страницы.

как показано ниже

<script src="./resources/brazil-uam-all-javascript.js"></script>
  </head>
<body id="uam_gui" onload="authenticate2();">
<div id="UAM_tool">

СЕЙЧАС ФУНКЦИЯ JAVASCRIPT

Пользователь должен ввести значение при появлении запроса с помощью диалогового окна. Если пользователь не вводит какое-либо значение и просто пытается обойти его, нажав ОК или ОТМЕНА или используя клавишу ESC или кнопку "Закрыть", чтобы избежать проверки подлинности, страница будет возвращаться с той же подсказкой. Здесь я косвенно захватываю ответ пользователя. Надеюсь, это поможет вам.

function authenticate2() {
var prompt_for_the_magic_number = prompt("Enter Your                         M  A  G  I  C    N  U  M  B  E  R     :::   ", "");
  if (prompt_for_the_magic_number === true)
  {
      if (prompt_for_the_magic_number.length === 0)
      {
          alert("You are supposed to ENTER A VALUE");
          location.reload();
      }
      else
      {
          if (prompt_for_the_magic_number.length > 4)
          {
              alert("You are supposed to ENTER ONLY 4 DIGITS");
              location.reload();
          }
          esle
          {
              //some code to allow access based on a logic
          }
      }
  }
  else
  {
      alert("You are supposed to ENTER 4 DIGITS");
      location.reload();
  }
}