60 votes

Comment facebook réécrit-il l'URL source d'une page dans la barre d'adresse du navigateur?

Aller à http://www.facebook.com/facebook?v=wall, puis cliquez sur l'onglet info. Le contenu sera chargé, et la barre d'adresse devient maintenant http://www.facebook.com/facebook?v=info mais la page web n'a pas de rechargement.

Au début, je pense que c'est de l'Ajax, mais ma question est, comment voulez-vous changer la barre d'adresse, sans rechargement? Je sais que je peux changer l'ancre (#mur) à l'aide de JS mais querystring (?v=mur), comment?

64voto

bobince Points 270740

C'est à l'aide de HTML5 nouveau history.pushState() fonctionnalité pour permettre la page de la mascarade à une URL différente de celle à partir de laquelle il a été initialement par les cheveux.

Ce ne semble pas être pris en charge par WebKit pour le moment, c'est pourquoi le reste d'entre nous assistons ?v=wall#!/facebook?v=info au lieu de ?v=info.

Cette fonction permet chargées dynamiquement des pages pour être correctement mis en signet, échangé etc entre JS de soutien et de non-JS-utilisateur prise en charge des agents. Parce que si vous comme un JS utilisateur lié à quelqu'un d' ?v=wall#!/facebook?v=info et leur navigateur ne prend pas en charge JS et XMLHttpRequest, la page ne fonctionne pas pour eux. L' #! est également utilisé en tant que conseil pour les moteurs de recherche pour télécharger le non-AJAX version.

19voto

Nick Craver Points 313913

@Snoob - je l'apprécierais si vous avez accepté @bobince de répondre au lieu de cela, il était sur la bonne voie sur les spécificités d'abord ici. Puisque je ne peux pas supprimer/supprimer ce jusqu'à ce qu'elle est adoptée, je vais le mettre à jour pour être aussi exactes que possible.


Pour le moment c'est un WebKit (Chrome, Safari, etc.) chose spécifique que vous avez vu (ou plutôt, de ne pas voir), comme @bobince points dans les autres navigateurs, vous pouvez voir la réelle URL dans la barre d':

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

Lorsque google Chrome, il indique:

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

Il fait un peu de sens, compte tenu de ce est comment vous rendre le Contenu AJAX crawlable avec le moteur de recherche Google, de sorte que leur navigateur reconnaît où le contenu est fourni.

Correction sur les détails: les navigateurs Webkit sont montrant l'URL raccourcie facebook veut en utilisant le HTML 5 de l'histoire des fonctionnalités que vous pouvez voir le code ici (prendre un coup d'oeil à l' HistoryManager) dans ce cas précis, ils sont à l'aide de .replaceState() pour remplacer l'URL vous êtes allé directement à un de disponible.

Note: Cette réponse ne peut pas être valide plus tard (le WebKit de bits), comme d'autres navigateurs prennent en charge les fonctionnalités de HTML5 de plus en plus et cela peut devenir obsolète rapidement.

0voto

Ronny Points 1124

Pour les développeurs MooTools, je recommande de vérifier le plug- in mootools-history de cpojer, qui fournit un support pour l'API d'historique native, le cas échéant, avec un repli sur les hachages.

-8voto

CharlesLeaf Points 2572

Je n'ai pas Facebook donc je ne peux pas vérifier. Mais je suis sûr à 95% qu'il a une véritable demande de page, la barre d'emplacement est unwritable, parce que ce serait une fonctionnalité très utile pour absure pour les sites web d'hameçonnage (au lieu de http://fakeonlinebank.com il réécrire http://yourtrustybank). C'est probablement juste tellement vite que votre navigateur semble ne charger qu'une partie?

Mais je suis curieux de voir si quelqu'un va me corriger sur ce point, car cela voudrait dire qu'ils ont la réponse que vous voulez entendre ;)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X