2008-09-29 24 views

Respuesta

195

Pruebe el evento onbeforeunload: se activa justo antes de que se descargue la página. También le permite volver a preguntar si el usuario realmente quiere irse. Vea la demostración onbeforeunload Demo.

Alternativamente, puede enviar una solicitud Ajax cuando él se vaya.

+3

Sería bueno para el usuario si realizaba un seguimiento si el formulario cambiaba y solo le pedía que lo hiciera, para que no sea molesto. – adam0101

+3

Tenga en cuenta también que varios navegadores móviles ignoran el resultado del evento (es decir, no piden confirmación al usuario). Firefox tiene una preferencia oculta en about: config para hacer lo mismo. En esencia, esto significa que el usuario siempre confirma que el documento puede estar descargado. – MJB

+0

Tenga en cuenta que este método también evoca cuando el usuario actualiza la página o envía un formulario. –

3

Una forma (algo hacky) de hacerlo es reemplazar y enlaces que se alejan de su sitio con una llamada AJAX al lado del servidor, indicando que el usuario se está yendo, luego use el mismo bloque de javascript para llevar al usuario a el sitio externo que han solicitado.

Por supuesto, esto no va a funcionar si el usuario simplemente cierra la ventana del navegador o tipos en una nueva dirección URL.

Para evitar esto, es posible que necesite usar el setTimeout() de JavaScript en la página, realizando una llamada AJAX cada pocos segundos (dependiendo de qué tan rápido desee saber si el usuario se ha ido).

+4

Si utiliza el enfoque de informe de inicio, no es necesario modificar todos los enlaces de la página. –

10

Para ello estoy usando:

window.onbeforeunload = function (e) { 

} 

Se disparó justo antes de que se descargue la página.

+0

Opera 12 y versiones anteriores no son compatibles ... http://www.zachleat.com/web/dont-let-the-door-hit-you-onunload-and-onbeforeunload/ – Cyrus

3

Sé que esta pregunta ha sido contestada, pero en caso de que sólo quiero algo para disparar cuando el navegador real está cerrada, y no sólo cuando se produce un pageload, puede utilizar este código:

window.onbeforeunload = function (e) { 
     if ((window.event.clientY < 0)) { 
      //window.localStorage.clear(); 
      //alert("Y coords: " + window.event.clientY) 
     } 
}; 

En Por ejemplo, estoy limpiando el almacenamiento local y alertando al usuario con los mouse y coords, solo cuando el navegador está cerrado, esto se ignorará en todas las cargas de página desde el programa.

+0

window.event no está definido para me –

+0

El ejemplo de Merr Leader es incorrecto, window.event solo debe usarse como una alternativa para versiones anteriores de IE; en otros casos, se debe usar el parámetro de evento (la variable 'e' en este caso): http://stackoverflow.com/questions/9813445/why-ff-says-that-window-event-is-undefined-call-function-with-added-event-list/9813624#9813624 – Sk8erPeter

+0

No iría tan lejos como para decir Me equivoco. Mis ejemplos me funcionan bien en IE y Chrome. Mi ejemplo fue para la situación en la que el usuario hace clic en la X (cerrar) en el navegador web. Ni tampoco la forma más bonita, pero funciona. –

1

Aquí hay una solución alternativa - ya que en la mayoría de los navegadores de los controles de navegación (la barra de navegación, pestañas, etc.) se encuentran anterior la zona contenido de la página, se puede detectar el puntero del ratón salir de la página a través de la parte superior y la pantalla un cuadro de diálogo "antes de salir". Es completamente discreta y que le permite interactuar con el usuario antes de que realmente realizan la acción que se vaya.

$(document).bind("mouseleave", function(e) { 
    if (e.pageY - $(window).scrollTop() <= 1) {  
     $('#BeforeYouLeaveDiv').show(); 
    } 
}); 

La desventaja es que por supuesto que es una suposiciónque el usuario realmente tiene la intención de irse, pero en la gran mayoría de los casos es correcta.

Cuestiones relacionadas