2010-11-07 35 views
9

Me pregunto cómo cambia facebook la URL cuando cambio de una foto a otra en un álbum. No hay etiqueta hash, solo una url real.Cambiar URL a través de JavaScript (sin etiqueta hash)

Ejemplo: la URL actual: facebook.com/photo.php?fbid=XXXXXX1 y si hago clic en siguiente, los cambios de URL a facebook.com/photo.php?fbid=XXXXXX2

¿Alguien sabe cómo realizar esto con JavaScript?

Respuesta

9

Sí. Salida https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history#Adding_and_modifying_history_entries

Empuja un nuevo estado de historial (una cosa HTML5) en lugar de usar la tecla hash.

+0

Gracias. ¿Funciona esto en otros navegadores también? – daniel

+0

¿Puede esto funcionar en el dominio cruzado? Si es así, entonces cualquier sitio puede pretender ser otro sitio :(Look everywere. –

+0

@ JamesM-SiteGen: No, no funciona crossdomain, como se indica en el enlace proporcionado por Matthew Brown: "La nueva URL debe ser del mismo origen que la URL actual;" –

0

En mis pruebas, sólo cambia el hash tag:

P. ej la URL real es:

http://www.facebook.com/photo.php?fbid=x&set=z 

y hacer clic en Siguiente en los resultados:

http://www.facebook.com/photo.php?fbid=x&set=z#!/photo.php?fbid=y&set=z&pid=pid&id=id 

La parte después de que el hash es de configuración para Google AJAX crawl. Pero para el propósito del navegador, es solo un hash (identificador de fragmento).

+0

Mhh, pero mi Firefox 4 (beta) no me muestra el hash ?! – daniel

+0

Sí, he notado que actualiza ese hash que es realmente similar a la url, por lo que es confuso. –

+0

@dan, tienes razón, está haciendo algo diferente en Firefox 4. El hash no se usa y la barra de direcciones nunca cambia, pero si mantengo un shell abierto, las actualizaciones de 'window.location'. –

1

Mi primer presentimiento sería:

document.location = facebook.com/photo.php?fbid=XXXXXX2; 

Con alguna manera de impedir la acción de la página por defecto de recarga.

+1

No hay forma de evitar una recarga si cambia la URL (excepto el hash). –

+0

Gracias por la sugerencia, era solo una teoría. –

+0

ReferenceError: Facebook no está definido :) no es una cadena :) Y en este caso debería tener "http: // al inicio –

1

Summerizing todas las respuestas,

podemos decir (no soy un codificador FB) que utiliza Facebook:

  • el HTML5 window.history.pushState/replaceState/popState métodos en el navegador que soportan estos métodos (creo que uno es Chrome). De esta forma, Facebook cambia la url real (no solo la parte posterior al carácter #).

  • En otros navegadores, que no soportan estos nuevos métodos HTML5 (como IE6/IE7 e IE8), Facebook simplemente cambia la parte de la URL después del carácter #, simplemente fijando la propiedad window.location.hash.

Cuestiones relacionadas