2009-11-06 7 views
37

He buscado durante horas, pero no he podido encontrar una solución para esto.¿Cómo puedo obtener la URL de destino para el evento onbeforeunload?

window.onbeforeunload = warn; 

Esto no funciona:

function warn (e) 
{ 
    var destination = e.href; 
    alert(destination); 
} 

bien, así que para despejar las cosas. Si el usuario hace clic en un enlace en la página, es fácil, porque puede agregar un manejador de eventos a todos los enlaces en evento de clic, pero. Quiero capturar la dirección, lo que el usuario escribe en la url box del navegador.

+0

Trabajo en sitios de procesamiento de datos y antes de que un usuario abandone la página, me aseguro de que todos los datos cumplan con los requisitos. El evento onbeforeunload es útil, pero engorroso debido a la forma en que los navegadores lo manejan. No puedo evitar que el usuario deje la página, pero sería bueno saber a dónde van. Da la casualidad, en mi caso, lo sé porque es un redireccionamiento generado por el sitio, por lo que puedo establecer una variable de sesión. –

Respuesta

55

Porque no se puede hacer. La nueva ubicación es información privada/confidencial. Nadie quiere que sepa qué sitios visitan cuando abandonan su sitio.

+2

Creo que la pregunta es incorrecta, ¿por qué usarla antes de descargar si va a una página en su propio sitio? Eso no tiene sentido. Misnyo, ¿puedes aclarar exactamente lo que quieres? –

+0

La respuesta de @bobince a continuación, es interesante: http://stackoverflow.com/a/1687028/538387 – Tohid

+0

@MichelvanEngelen - b/c quizás desee activar una pantalla de carga CSS para que el usuario sepa que se está preparando para navegar en algún lugar, que sí hicieron clic en un enlace y algo está sucediendo (hace que el sitio se sienta más receptivo, especialmente cuando lleva un tiempo navegar hacia otra página) – jbyrd

18

La respuesta de Kaze es un enfoque interesante, pero mirar el foco del elemento cuando se navega la página no es realmente confiable. En parte porque hay un retraso entre el clic del enlace y la navegación fuera de la página (tiempo durante el cual el usuario puede mover el foco a algún otro elemento, pero también porque un enlace puede estar enfocado (por ejemplo, mediante control del teclado o mousedown-sin -click) sin utilizar realmente para navegar fuera de la página. Así que si enfocaste un enlace y luego cerraste la ventana, pensaría que estás siguiendo el enlace.

Reventado onclick por cada enlace en la página (más onsubmit en cada formulario) es un poco más confiable, pero aún puede ser engañado debido a la demora. Por ejemplo, usted hace clic en un enlace, pero luego, antes de que comience a cargarse, presione el botón Atrás (o presione Escape). De nuevo, si cierra el ventana, cree que está siguiendo el enlace.

Quiero capturar la dirección, lo que el usuario escribe en el cuadro de la url del navegador.

No hay forma de que suceda alguna vez. Es una privacidad obvia no-no.

+3

Tienes razón, eliminé mi respuesta. –

+12

Pero ¿POR QUÉ hiciste eso? Si su respuesta no es completamente correcta, no se preocupe, la gente tiene la oportunidad de juzgarla con su voto. Pero aún puede ser útil para otras personas. Me hubiera gustado ver su enfoque de "último enfoque". – cprcrack

+0

De acuerdo - @KazenoKoe por favor agregue su respuesta! –

16

Si lo que desea es ver el destino lo enlace, se puede utilizar:

document.activeElement.href 

Sin embargo, conseguir la línea de dirección de destino no es posible.

He oído hablar de soluciones donde desencadenan un evento si el mouse se mueve hacia la línea de dirección (para advertir al usuario que hay procesos inacabados que no se han tratado), pero este tipo de hackeo lo haría nunca lo haces.

Cuestiones relacionadas