2010-01-20 20 views
14

¿Hay alguna forma de capturar si el usuario hizo clic en OK o CANCEL?Captura la respuesta del usuario al usar window.onbeforeunload

Necesito hacer algo sólo si el usuario abandona la página ....

+0

Por lo que yo sé, que (aún así, en 2014) tienen que asumir que si se dispara el window.onunload, entonces ellos respondieron bien a la pregunta onbeforeunload. He estado esperando algo mucho más limpio, pero todavía tengo que encontrarlo. – Patrick

Respuesta

4

No, los navegadores le permiten sólo para especificar el texto en el cuadro de alerta, pero no hay manera de coger el resultado.

+1

oh genial, esta función es muy útil entonces (sarcasmo). pasando a onunload – sarsnake

+0

O esto está completamente mal o me estoy volviendo loco. Sé que es posible mostrar un diálogo de confirmación en la descarga; este mismo sitio lo hace si presionas Atrás mientras editas una publicación. – iandisme

+0

@gnomixa ¿Estás bromeando? Estoy * contento * de que los navegadores no le den este poder a las secuencias de comandos. –

8

Aquí está la solución que estoy usando en una situación en la que necesito hacer algo (como borrar la sesión) SÓLO cuando el usuario navega desde la página.

tengo 2 vars globales

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

Luego, por supuesto, en cada página someter/botón/lista desplegable, etc ... lo que necesita para asegurarse de que las variables globales anteriores se establecen en false.

Espero que esto ayude a alguien.

1

Puede usar un setTimeout para verificar.

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

Básicamente, los bloques de función onbeforeunload la ejecución y el tiempo de espera sólo se ejecutan si el usuario sigue en la página. Los 0 milisegundos solo son para ponerlo al final de la cola de ejecución.

+0

Esto hace lo contrario de lo que se preguntó en la pregunta. La pregunta fue (parafraseada) "¿Cómo puedo hacer que mi código actúe cuando el usuario decide * abandonar * la página"? El código en su respuesta actúa (genera una alerta) cuando el usuario * permanece * en la página. Estoy bastante seguro de que podrías arreglar el código para hacer lo que realmente hace la pregunta, pero entonces, ¿qué sería lo que proporcionaría este método que es mejor que el método propuesto por [sarsnake] (http://stackoverflow.com/a/ 2103974/1906307)? – Louis

0

Este es un truco de programación o más bien una solución alternativa que puedes probar. No encontré ninguna forma predeterminada de "javascript provided"

Tengo una página web (tiene un formulario en ella) sentada en un sistema local que necesita protección de usuarios no autorizados para ingresarla. .

He creado una función de JavaScript que se carga junto con la carga de la página principal.

, como a continuación

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

EMPRESA la función de JavaScript

El usuario se supone que introduzca un valor cuando se le solicite con un cuadro de diálogo. Si el usuario no ingresa ningún valor y simplemente trata de eludirlo haciendo clic en OK o CANCEL o usa la tecla ESC o el botón "Cerrar" para evitar la autenticación, la página se recuperará con el mismo aviso. Aquí estoy capturando indirectamente la respuesta del usuario. Espero que ayude es su requisito.

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