2012-02-21 15 views
12

Quiero ejecutar un método de acción cuando el usuario abandona una página en particular usando jQuery.

La página tiene el siguiente código:

<script type="text/javascript"> 

     $(window).unload(function() { 
      alert("Handler for .unload() was called."); 
     }); 

    </script> 

Cuando navego fuera de la página nunca ver la alerta esperado.

+1

¿Has probado en otros navegadores? ¿En qué navegador (s) lo has probado? La documentación en el sitio de jQuery es clara con respecto a que este evento es bastante inestable. – anddoutoi

+1

La descarga está en desuso y eliminada, verifique esto: https://api.jquery.com/unload/ –

Respuesta

25

En realidad algunos navegadores como Google Chrome pueden bloquear si intentas alert en una ventana unload. Como usuario, me gusta esta característica. Alertar cada vez que tratan de navegar fuera de una página chupa:

enter image description here

Reemplazar la alerta con un console.log o algo menos intrusivo para el usuario y el evento será llamado felizmente.

Es posible que también quiera realizar el pedido del evento onbeforeunload.

+0

Gracias. Sabía que el evento de descarga era inestable, pero no sabía que Chrome (que es lo que estaba usando) se comporta así. –

+0

@Darin Dimitrov: reemplazar la alerta con console.log no le dará mucho efecto útil, ya que la consola (al menos en Chrome) se borrará, inmediatamente después de que actualice la página o navegue a otra.Puede ver los rastros de sus mensajes escritos para consolar algunos milisegundos antes de que realmente desaparezcan, por lo que preferiría encontrarlos inútiles. Desactivar alerta en descarga no es la mejor idea. Es difícil hacer algunas pruebas serias y las páginas "horribles" pueden hacer una solución fácil al mostrar un mensaje propio, "molesto", sin usar alertas (jQuery UI, algunos div, etc.). – trejder

+7

@trejder Si hace clic derecho en la consola en cromo, hay una opción para conservar el registro en la navegación – Luke

0
window.onbeforeunload=navigationError; 

var dont_confirm_leave = 0; var leave_message = 'You sure you want to leave?'; 

function navigationError(e) 
    { 
    if(dont_confirm_leave!==1) 
    { 
     if(!e) e = window.event; 
     //e.cancelBubble is supported by IE - this will kill the bubbling process. 
     e.cancelBubble = true; 
     e.returnValue = leave_message; 
     //e.stopPropagation works in Firefox. 
     if (e.stopPropagation) 
     { 
     e.stopPropagation(); 
     e.preventDefault(); 
     } 

     //return works for Chrome and Safari 
     return leave_message; 
    } 
    } 
10

jquery .on ('unload', ..); no fue confiable para mí. cambié para usar beforeunload. solo asegúrate de no devolver nada, o el usuario obtendrá un "¿estás seguro de dejar la página" -popup?

<script type='text/javascript'> 
    $(window).on('beforeunload', function(){ 
     console.log("beforeUnload event!"); 
    }); 
</script> 
+0

Aunque, la respuesta de Darin es correcta, los usuarios deberían referirse a esta respuesta. El uso de "onbeforeunload" no solo te permite activar alertas, sino que también es recomendable y confiable a diferencia de la descarga, que, al menos para Chrome, es bastante problemática. –

5

como bhelm dijo beforeunload funciona para mí también.
retorno falsa en este caso se invoca el navegador por defecto

¿está seguro de que desea salir de esta página?


$(window).on('beforeunload', function() 
    { 
     return false; 
    }); 
0

si desea alertar al usuario de que salir de esta página y luego si esto

/* $(window).unload(function() 
 
{ 
 
\t //alert("you leaving this page"); 
 
\t console.log("you leaving this page"); 
 
}); */

función no funciona para usted, entonces reemplace el código con on ("beforeunload", function) como este

$(window).on("beforeunload", function() 
 
{ 
 
\t alert("you leaving this page"); 
 
\t console.log("you leaving this page"); 
 
});

este trabajo para mí! puede ver la salida en el registro de la consola you leaving this page

Cuestiones relacionadas