2009-11-01 19 views
7

Estoy haciendo un sitio web que tienden a manejar toda la solicitud en una página (Ajax). así que pensé que podría atrapar clic de cada usuario en un enlace y comprobar SI es en mi sitio web que hago algo en JavaScript como una petición ajax por ejemplo, ELSE sería abrir el enlace, como de costumbre!Cómo supervisar los cambios en la url (identificador de fragmento - la parte de anclaje de una URL)

haciendo un reloj en window.location no funcionó! y, además, no sé si hay alguna forma de obtener la parte de la url que está después del signo #. Nota: tanto Gmail y Facebook hace que supongo !, que utilizan algo como esto:?
http://mail.google.com/mail/#inbox
http://www.facebook.com/home.php#/bandeja de entrada/ref = mb

Considere amablemente: que Me encanta usar jQuery en mis proyectos, por lo que se prefiere cualquier solución que lo use.

¿Alguna idea?

+1

@Omar: La parte de la URL después de # es el 'hash '. Editó el título y la etiqueta de tu pregunta. :) –

+4

@ o.k.w: La parte de la URL después de # se llama 'fragmento', no hash. –

+0

@ o.k.w Gracias, no soy un inglés "nativo", así que siéntete libre de corregirlo para que sea más obvio. –

Respuesta

4

Aquí es otra buena lectura: Restoring Conventional Browser Navigation to AJAX Applications

extracto del artículo:

Muchos desarrolladores han adoptado AJAX como una forma para desarrollar aplicaciones ricas de Internet que son casi tan interactivo y sensible como aplicaciones de escritorio. AJAX funciona dividiendo la interfaz de usuario web en segmentos diferentes. Un usuario puede realizar una operación en un segmento y luego comenzar a trabajar en otros segmentos sin esperar a que termine la primera operación .

Pero AJAX tiene una gran desventaja; es rompe el comportamiento estándar del navegador, como como Atrás, Adelante y marcando soporte. En lugar de forzar a los usuarios a adaptarse a las deficiencias de AJAX, los desarrolladores de deben hacer que sus aplicaciones AJAX cumplan con el estilo de interacción web tradicional , .......

+0

Buena información, siempre me gusta considerar seriamente la usabilidad en mis sitios web. –

4

El fragmento parte de la URL se utiliza para habilitar el historial de navegación (atrás y botones de avance) en los sitios web habilitados para AJAX. Si desea "trampa" hace clic en los enlaces, ya que estás usando jQuery todos modos, usted podría hacer eso:

$('a').click(function() 
{ 
    var item = $(this); 
    var url = item.attr('href'); 
    // your logic here 
}); 

Si utiliza fragmentos (window.location.hash) en la constelación con AJAX, nota que IE6 envía la parte del fragmento de la url en las solicitudes AJAX lo que puede llevar a errores muy difíciles de depurar, así que tenlo en cuenta.

+0

Ta, justo lo que necesitaba. – Pool

3

Consulte el enlace de @Pekka al How can you check for a #hash in a URL using JavaScript? para ver el hash. Simplemente ponga esa función en la devolución de llamada a window.setInterval()

+0

Nota: window.setInterval() puede matar el rendimiento. Prefiero usar el controlador de eventos (específicamente el modo de jQuery) –

+0

Si miras el jquery hashchange, es solo un script setinterval en todo menos en IE8. Sin embargo, es un buen guión. – Justin

+0

¡Oh !, creo que podría volcarlo por eso. –

4

Hay un evento hashchange enviado en la ventana para los navegadores más recientes.

+1

Estoy buscando una solución compatible con versiones anteriores (como IE6 :() Así que prefiero monitorear los clics de ancla –

+4

Hmmm, http://plugins.jquery.com/project/hashchange hace el truco :) . gracias por la palabra clave 'hashchange' –

Cuestiones relacionadas