Puedo darle la respuesta a esto, porque me he enfrentado y he resuelto este problema.
Hay algunos conceptos para entender aquí primero:
- Javascript no puede alterar el historial del navegador directamente.
- cuando la URL base de un iframe en la página cambia, el historial se actualiza. (pero esto tiene algunos caprichos con diferentes navegadores).
- la url tiene una parte "hash": por ejemplo, en la URL
http://mail.google.com/mail#inbox
, #inbox
es la parte hash. Vamos a llamarlo el "hash". entonces http://mail.google.com/mail
será nuestra "URL base".
El historial de seguimiento de GMail se hace principalmente utilizando trucos basados en este "hash".
Así, unos más conceptos:
- cuando la dirección URL en la barra de direcciones, la historia se actualiza (la URL anterior entra en la historia)
- cuando la URL base se cambia, la la pagina esta recargada
- cuando la parte hash de la URL cambia sin que la URL base cambie, la página no se vuelve a cargar.
Por lo tanto, cuando se va http://mail.google.com/mail#inbox
-http://mail.google.com/mail#sent
, la página no refrescarse.
Ahora, si GMail recibiera una notificación de evento cuando cambiara el hash, entonces gmail podría tomar medidas basadas en eso. Lamentablemente, no hay eventos DOM que puedan ayudarnos a capturar acciones de historial. Entonces, en cambio (esta es la parte que muestra cómo superé el problema), ejecutamos un ciclo infinito que busca cambios en el hash. Si observa un cambio, detectamos un clic en el botón "volver" o "avanzar" del navegador.
Al resolver esto, hice una herramienta práctica: el URL parser. Puede analizar los parámetros GET en la URL, así como los parámetros codificados en la Hash. ¡Dale una oportunidad a la demostración!
¡Salud!
Sobre este problema en IE: No me di cuenta que este hash 'solución basada no funciona en IE (mala desarrollador de Linux de edad).
Pero para IE, puede utilizar un iframe oculto y usar su propiedad "url affect history" para implementar el historial. Sé que esta afirmación carece de detalles, pero eso se debe a mi propia falta de experiencia con IE.
voy a intentar esta solución, y hacer un seguimiento :)
me encontré con una gran cantidad de enlaces en internet, que lo hacen las implementaciones propias de la historia usando iframes/ubicación de hash. No tuve la paciencia para desenterrar las diferencias entre la interfaz iframe en varios navegadores.
Supongo que preferiría el jquery plugin. YUI también tiene un gerente de historia.
¡Salud!
1 más la gente debe saber sobre el diseño de aplicación web en este modelo! – jrharshath