2010-10-29 15 views
13

Estoy tratando de implementar la navegación de contenido como se hace en Facebook cuando el usuario está navegando por las fotos. Supongo que todo el mundo está familiarizado con la navegación de fotos donde puede hacer clic en "siguiente" y "anterior" e inmediatamente obtener la foto siguiente o anterior (también puede navegar usando las teclas de flecha).página "Redirigir" sin actualizar (estilo de fotos de Facebook)

Cuando hace clic en "siguiente", por ejemplo, observa que la página no actualiza, solo el contenido. Al principio pensé que se hace usando llamadas ajax simples que actualizan solo el "contenido" en este caso la imagen, descripción y comentarios. Pero luego noté que también cambió la URL en la barra de herramientas "Ubicación" de mi navegador. Intenté inspeccionar esto usando Firebug y descubrí que al hacer clic en "Siguiente" solo se descarga la siguiente foto y todavía no sé de dónde provienen los & metadatos de imagen (descripción, hora, etiquetas, ...) cargado.

¿Puede alguien explicar cómo se realiza esta técnica? La página URL cambia sin actualizar la página (o incluso sin página "parpadeando" si se actualiza desde la caché). Sé cómo cambiar el contenido de la página usando ajax pero la URL de esa página permanece igual todo el tiempo. Si hago clic en el botón "actualizar", vuelvo a obtener la primera página. Pero no en Facebook ya que incluso el "window.location" se cambia cada vez sin una redirección real.

La otra cosa que noté es que la barra de herramientas inferior (aplicaciones, chat, ...) está "siempre en la parte superior". Incluso si cambia la página, esta barra de herramientas no se actualiza y siempre permanece en la parte superior; ni siquiera "parpadea" como otras páginas que se actualizan (ya sea desde el servidor web o desde la memoria caché local). Supongo que esta es la misma técnica que la anterior, ¿algún tipo de redirecciones "falsas" o algo así?

la respuesta es pushState

if (window.history.pushState) 
    window.history.pushState([object or string], [title], [new link]); 

Sonreirás :)

+2

Por lo que vale la pena [ History.js] (https://github.com/balupton/History.js) proporciona la misma API de HTML5 al degradar con gracia cualquier navegador que no lo admita (incluido el soporte para datos y títulos, y la funcionalidad replaceState). Usar eso significaría que no tendría que cambiar su código para los cambios de IE9. – balupton

Respuesta

5

he tratado de cambiar a través de imágenes de Facebook, y esto es lo que vi:

En Firefox :

La URL de la página no cambia. Solo el hash está cambiando. This is a technique used to allow crawlers to index the content. Lo que sucede es lo siguiente:

  • usuario hace clic en "siguiente"
  • JS carga la siguiente imagen con etiquetas, comentarios, etc., y reemplaza el contenido de edad con ellos.
  • JS cambia el hash para corresponder la nueva imagen

URLs este aspecto: http://www.facebook.com/home.php?#!/photo.php?fbid=1550005942528966&set=a.1514725882151300.28042.100000570788121&pid=3829033&id=1000001570788121 (nótese el hash)

En cuanto a la segunda pregunta, esto es sólo un beneficio de la técnica anterior. Cuando estás en Facebook, la página rara vez se actualiza. Solo se cambia el hash para que pueda enviar enlaces a otras personas y los rastreadores pueden indexar el contenido.

En Google Chrome:

eso parece cromo hassome para cambiar las direcciones URL sin actualizar la página. Lo hace usando window.history.pushState. Lea sobre esto here.

URLs este aspecto: http://www.facebook.com/photo.php?fbid=1613802157224343&set=a.1514725288215100.28042.1000005707388121&pid=426541&id=1000001570788121 (nótese que no hay hash de aquí, pero aún así la url está cambiando junto con imágenes)

En Epiphany:

Epifanía no cambia la dirección URL cuando la imagen cambia

URLs este aspecto: http://www.facebook.com/photo.php?fbid=1441817122377521&set=a.1514725882215100.28042.1000005707848121&pid=3251944&id=1000200570788121 (no hay hash y la URL sigue siendo el mismo cuando se cambia la imagen)

(no tienen otros navegadores para verificar en este momento)

+0

De acuerdo. Gracias por la explicación, agregaré mi código sobre pushState en cuestión. –

+0

Tal vez la vez que respondió esto usaron cambios hash para cargar imágenes nuevas, pero ahora cuando hace clic en el siguiente botón, la url misma se cambia pero la actualización no se actualiza. E incluso cuando hace clic en Noticias principales en los cambios de la página principal, pero la página no se actualiza. Tengo mucha curiosidad sobre cómo funciona eso. – Sridarshan

+0

@UberGeek AFAIK firefox (supongo que hablas de eso) tiene soporte para 'window.history.pushState' en las nuevas versiones –

0

Usted puede notar que la url de la página sigue siendo la misma. Lo que se cambia, sin embargo, es hash de página (la parte después de # en la url).

se necesita algo como esto: http://code.google.com/p/reallysimplehistory/

+0

Eso no es correcto. Las URL de imagen aparecen como 'http: //www.facebook.com/photo.php? Fbid = 135122293393816 & set = t.1575828580 & pid = 8182864 & id = 15752828580' en mi barra de URL de cromo y no hay' # 'en ella. –

+0

@Gabi: Chrome admite window.history.pushState, y por lo tanto, en Chrome, es posible cambiar la barra de URL sin forzar una recarga. En otros navegadores (Firefox, IE), la barra de URL solo se puede modificar mediante el método window.location.hash, que agrega datos de cambios (o los recupera) después de una etiqueta hash al final de la URL. –

2

La única técnica no se menciona aquí es el método window.onhashchange() (apoyado en IE8 + y la mayoría de los otros) que podrían haber utilizado

+0

Creo que esto es exactamente lo que sucede y no al revés. Los enlaces siguiente y anterior solo cambian el hash y el código JavaScript reacciona y carga la foto relevante. – Tallmaris

Cuestiones relacionadas