2010-01-20 2 views
14

Есть ли способ захватить, нажал ли пользователь OK или ОТМЕНА?Захват ответа пользователя при использовании window.onbeforeunload

мне нужно сделать что-то только если пользователь покидает страницу ....

+0

Насколько я знаю, ты (до сих пор, в 2014 году) должны предположить, что если window.onunload обжигают, затем они ответили ОК на onbeforeunload вопрос. Я надеялся на что-то гораздо более чистое, но еще не нашел его. – Patrick

ответ

4

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

+1

oh great, эта функция много используется тогда (сарказм). переход на onunload – sarsnake

+0

Либо это совершенно неправильно, либо я схожу с ума. Я знаю, что можно показать диалог подтверждения при выгрузке; этот сайт делает это, если вы нажмете Назад при редактировании сообщения. – iandisme

+0

@gnomixa вы шутите? Я * рад * браузеры не дают этой возможности сценариям. –

8

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

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

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

Тогда, конечно, на каждой странице нажмите кнопку/кнопка/выпадающий список и т.д. ... Вы должны убедиться, что указанные выше глобальные переменные устанавливаются в ложь.

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

1

Вы можете использовать один 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 миллисекунд только для того, чтобы положить его в нижнюю часть очереди выполнения.

+0

Это противоречит тому, что было задано в вопросе. Вопрос был (перефразирован) «Как я могу заставить свой код действовать, когда пользователь решает * оставить страницу». Код в вашем ответе действует (вызывает предупреждение), когда пользователь * остается * на странице. Я уверен, что вы можете исправить код, чтобы сделать то, что на самом деле задает вопрос, но тогда, что бы этот метод обеспечил, что лучше, чем метод, предложенный [sarsnake] (http://stackoverflow.com/a/ 2103974/1906307)? – Louis

0

Это программный трюк или, скорее, обходной путь, который вы можете попробовать. Я не нашел «предоставленных 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(); 
    } 
} 
Смежные вопросы