2011-04-07 43 views
21

Estoy tratando de crear mi propia biblioteca de acceso web (por diversión) como Google Analytics donde puedo detectar cuando un usuario accede a su página web, qué páginas ven etc.detectar cuando un usuario deja una página web

¿Hay una forma de determinar cuándo el usuario deja una página &/o deja el sitio web para siempre?

He codificado correctamente (en python) la detección cuando el usuario 1ra accede a mi sitio (usando una cookie) & cómo determinar qué páginas ven. Pero no sé cómo podría detectar cuando el usuario abandona el sitio web para siempre.

¿Hay alguna manera en javascript (quizás puedo detectar cuando la página/url está cambiando?). Sé que en HTTP hay un encabezado de referencia que me dice de dónde vino el usuario, tal vez cuando el usuario se muda a otro sitio web (fuera del mío), puedo ser notificado de esto (porque seré el referente en esa solicitud HTTP) ? ¿Estoy en lo correcto?

Respuesta

21

usando jQuery puede desencadenar este:

$(window).bind('beforeunload', function() { 
    // ajax call perhaps 
    // triggering a write to db or filesystem... 
}); 

manera javascript puro:

<html> 
<head> 
<script> 
function closeIt() 
{ 
    return "Any string value here forces a dialog box to \n" + 
     "appear before closing the window."; 
} 
window.onbeforeunload = closeIt; 
</script> 
</head> 
<body> 
    <a href="http://www.somewhere.com">Click here to navigate to 
     www.somewhere.com</a> 
</body> 
</html> 
+1

Solo una rápida advertencia, acabo de pasar esto con un cliente. Funciona ..... PERO ..... te limita a un diálogo de alerta solo en la práctica. Estaba intentando obtener un cuadro de diálogo de IU modal para hacer una encuesta de salida rápida (la elección del cliente, no la mía) y terminé con dos opciones: o bien devolver falso, mostrar el diálogo como se esperaba, pero mostrar una alerta que decía "falso "o devuelve verdadero y simplemente omita el modal. Por lo tanto, si intenta hacer algo más que un cuadro de alerta, prepárese para golpearse la cabeza contra la pared una y otra vez. No es bonito – bpeterson76

+0

Para el registro: sí, confirmado para Chrome ... Estoy descubriendo aquí que si realiza una devolución de llamada para devolver un valor nulo, entonces la alerta no aparece. –

1

Hay un evento de descarga que puede manejar en JavaScript. Por ejemplo:

window.onunload = unloadPage; 

function unloadPage() 
{ 
alert("unload event detected!"); 
} 

Desafortunadamente, no hay manera de saber donde el usuario es en realidad va cuando salen de la página actual (a diferencia de un referente, al entrar en la página).

Una idea es establecer una variable (quizás en la base de datos) en el controlador de descarga (a través de una llamada AJAX o no), y luego eliminarla si el usuario ingresa a otra página poco después. Cualquiera que sea el registro que no se elimine (o que se desactive, elimina por software) es su último evento de salida antes de que el usuario rebote en su sitio web o cierre el navegador.

0

Puede enlazar a la ventana.antes de descargar o de window.unload.

Ninguno de estos métodos es muy confiable.

1

Puede marcar todos los enlaces en su sitio como enlaces internos o externos. Deben apuntar a su sitio, pero luego redireccionar a la ubicación, seleccionada por el usuario. Antes de la redirección, puede señalar a ese usuario que se alejó de su sitio.

Pero.

Será mejor que ponga en cada página de su sitio un pequeño script que (digamos cada 20-30 segundos) haga una solicitud GET a una url específica en su sitio. Para que pueda rastrear el número de solicitudes de cada usuario.

7

Mientras el usuario siga las reglas que espera, la conexión anterior funcionará. Eso significa, cerrar una pestaña, cerrar la ventana o navegar a otro sitio.
Sin embargo, no hay manera de detectar esto confiablemente con javascript, antes de descargar no se dispara en muchos casos, como cerrar el navegador (ctrl + q), bloqueo del navegador, historial (volver) y la ópera y algunas versiones de Chrome tiene soporte limitado para antes de descargar.

Si desea detectarlo con de alta precisión, debe enviar solicitudes Ajax periódicamente que muestren que el usuario "todavía está vivo".registrar esas solicitudes en una base de datos o archivo y analizarlo por secuencia de tiempo.
Por lo tanto, si "ping" la base de datos cada 20 segundos, puede saber por consultas bastante simples que el navegador no ha "pinchado" después de un momento, y determinar que el usuario ya no está en el sitio.

Cuestiones relacionadas