Захват ответа пользователя при использовании 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();
}
}