Actualizando la barra de direcciones a través de Javascript

Todavía ahora sabía que no era posible cambiar los contenidos de la barra de direcciones sin cambiar la página (y sí, no estoy hablando de #). Recientemente he notado github.com. ¿Cómo lo están haciendo en su sitio? pueden get un evento fácilmente cuando el usuario hace clic en el button Atrás del browser o al button siguiente. dojo.back también tiene esta característica. ¿Pero cómo cambiar la barra de direcciones con javascript sin salir de la página?

Hay dos maneras:

  • La function pushState() HTML5 . Facebook y Github usan esto, por ejemplo. Le permite modificar la URL completa y dispara los controlleres de events cuando cambia el estado del historial. Mozilla tiene una buena visión general .
  • La variante anterior es usar la parte hash de la URL (esto es lo que hace Twitter). Esto significa que cambia window.location.hash , supervisa los cambios y, según el valor de ese hash, carga el contenido apropiado. Sin embargo, esto significa que cuando el usuario solicita, por ejemplo, http://twitter.com/#!/27c3/status/18331752900591616 , solo se solicita la parte antes del signo de almohadilla desde el server web, todo después del hash es solo del cliente. negocio. Esto significa que el server aún no puede decidir qué contenido entregar al cliente.

testing dojo.hash

A lo que te refieres en GitHub es el # (hash). Cuando haces clic derecho en un número de línea, agrega el número a tu hash.

 window.location.hash = 'HELLO'; 

Ponlo en una página para probarlo. No es posible cambiar window.location sin la recarga de la página. Lo del button de retroceso es un poco más complicado, pero Dojo es tu mejor apuesta para eso. jQuery no proporciona esto. Sin embargo, Dojo tiene un código bastante limpio, por lo que debería poder realizar una ingeniería inversa de sus funciones (si elige include esa funcionalidad en su propia biblioteca).

También notará que Google está haciendo lo mismo con: http://code.google.com/p/digitalxero/source/browse/#svn%2Ftrunk%2Flocale%2Fde

Si hace clic en carpetas (izquierda), cambia el hash y proporciona contenido diferente.