¿Cómo reescribe facebook la URL de origen de una página en la barra de direcciones del navegador?


Ir a http://www.facebook.com/facebook?v=wall , luego haga clic en la pestaña información. El contenido se cargará, y la barra de direcciones ahora se convierte en http://www.facebook.com/facebook?v=info pero la página web no se volvió a cargar.

Al principio creo que es Ajax, pero mi pregunta es, ¿cómo se cambia la barra de direcciones sin recargar? Sé que puedo cambiar anchor (#wall) usando JS pero querystring (?v = muro), ¿cómo?

Author: bmargulies, 2010-10-03

4 answers

Está usando el nuevo HTML5 history.pushState() característica para permitir que la página se disfrace de estar en una URL diferente a la de la que se obtuvo originalmente.

Esto solo parece ser soportado por WebKit en este momento, por lo que el resto de nosotros estamos viendo ?v=wall#!/facebook?v=info en lugar de ?v=info.

La característica permite que las páginas cargadas dinámicamente se marquen correctamente, se intercambien, etc. entre agentes de usuario compatibles con JS y no compatibles con JS. Porque si usted como usuario de JS enlazó a alguien a ?v=wall#!/facebook?v=info y su navegador no era compatible con JS y XMLHttpRequest, la página no funcionaría para ellos. El #! también se utiliza como un consejo para los motores de búsqueda para descargar la versión no AJAX.

 64
Author: bobince,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-03 13:09:53

@Snoob - Te agradecería que aceptaras la respuesta de@bobince en su lugar, él estaba en el camino correcto sobre los detalles primero aquí. Como no puedo eliminar / eliminar esto hasta que no sea inaceptable, lo actualizaré para que sea lo más correcto posible.


Por el momento es un WebKit (Chrome, Safari, etc.) cosa específica que estás viendo (o más bien, no viendo), como @bobince señala en otros navegadores puedes ver la URL real en el bar:

http://www.facebook.com/facebook?v=wall#!/facebook?v=info\

Donde Chrome solo muestra:

http://www.facebook.com/facebook?v=info

Tiene un poco de sentido, dado que así es como haces que el contenido de AJAX se pueda rastrear con el motor de búsqueda de Google, por lo que su navegador reconoce de dónde proviene el contenido también.

Corrección en los detalles: Los navegadores Webkit muestran la URL acortada que Facebook quiere usar las características del historial HTML 5 puede ver el código aquí (eche un vistazo a HistoryManager) en este caso específicamente están usando .replaceState() para reemplazar la URL a la que fue por la directa disponible.

Nota: Esta respuesta puede no ser válida más tarde (el bit específico de WebKit), ya que otros navegadores soportan las características de HTML5 cada vez más esto puede quedar obsoleto rápidamente.

 19
Author: Nick Craver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:13:51

Para los desarrolladores de MooTools, recomiendo revisar el plugin de cpojer mootools-history que proporciona soporte para la API de historia nativa cuando está disponible, con un respaldo a los hashes.

 0
Author: Ronny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-21 22:54:50

No tengo Facebook, así que no puedo comprobarlo. Pero estoy 95% seguro de que tiene que ser una solicitud de página completa, la barra de ubicación no se puede escribir porque esta sería una característica muy útil para absure para sitios web de phishing (en lugar de http://fakeonlinebank.com {[2] } se reescribe a http://yourtrustybank). Probablemente es tan rápido que su navegador parece cargar solo esa parte?

Pero tengo curiosidad por ver si alguien me corregirá en esto, porque eso significaría que tienen la respuesta usted quiere escuchar;)

 -8
Author: CharlesLeaf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-03 12:55:55