2010-10-03 21 views
60

Vai a http://www.facebook.com/facebook?v=wall, quindi fai clic sulla scheda informazioni. Il contenuto verrà caricato e la barra degli indirizzi ora diventa http://www.facebook.com/facebook?v=info ma la pagina Web non è stata ricaricata.In che modo Facebook riscrive l'URL di origine di una pagina nella barra degli indirizzi del browser?

In un primo momento penso che sia l'Ajax, ma la mia domanda è: come si fa a cambiare la barra degli indirizzi senza ricaricare? So che posso cambiare l'ancora (#wall) usando JS ma querystring (? V = wall), come?

+2

vedo un sacco di voti e preferiti, ma qualcuno ha una risposta? – Snoob

+0

E c'è anche un indicatore di carico nella scheda del browser. – jcubic

+0

Qualcuno ha una risposta? – Snoob

risposta

64

Sta utilizzando la nuova funzione history.pushState() di HTML5 per consentire alla pagina di mascherarsi in un URL diverso da quello da cui è stata originariamente recuperata.

Questo sembra solo di essere supportato da WebKit, al momento, è per questo che il resto di noi stanno vedendo ?v=wall#!/facebook?v=info invece di ?v=info.

La funzionalità consente alle pagine caricate in modo dinamico di essere opportunamente contrassegnate, scambiate, ecc. Tra gli agenti utente che supportano JS e non JS. Perché se tu come utente JS colleghi qualcuno a ?v=wall#!/facebook?v=info e il loro browser non supporta JS e XMLHttpRequest, la pagina non funzionerebbe per loro.Lo #! viene anche utilizzato come suggerimento per i motori di ricerca per scaricare la versione non AJAX.

-8

Non ho Facebook, quindi non posso controllare. Ma sono sicuro al 95% che debba essere una richiesta a pagina intera, la barra degli indirizzi non è scrivibile perché sarebbe una funzione molto utile per i siti Web di phishing (anziché http://fakeonlinebank.com riscrive su http://yourtrustybank). Probabilmente è così veloce che il tuo browser sembra caricare solo quella parte?

Ma io sono curioso di vedere se qualcuno mi correggerà su questo, perché ciò significherebbe che hanno la risposta che si vuole ascoltare;)

+0

Grazie, ho provato con Firebug per cambiare quarantina un facebook, quindi faccio clic scheda informazioni e quello che ho fatto ancora "vivo" -> Non è richiesta fullpage – Snoob

+0

potrebbero essere utilizzando archiviazione lato client per accelerare le cose? – Michael

+0

Quale browser usi, nel mio Firefox (Mac) questo è l'URL che finisco con http://www.facebook.com/facebook?v=wall#!/facebook?v=info, sicuramente la tecnica di hash della cronologia . – Michael

19

@Snoob - sarei grato se si accetta @bobince's answer invece, è stato sulla strada giusta per le specifiche prima qui. Dal momento che non posso cancellare/rimuovere questo fino a quando non è accettato, lo aggiornerò per essere il più corretto possibile.


Al momento E 'un WebKit (Chrome, Safari, etc.) cosa specifica che stai vedendo (o meglio, non visto), come @bobince punti in altri browser voi può vedere la vera URL nella barra:

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

Dove Chrome dimostra:

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

Ha un po 'di senso, given this is how you make AJAX Content crawlable with the Google search engine, quindi il loro browser riconosce da dove proviene il contenuto.

Correzione sulle specifiche: browser Webkit stanno mostrando il facebook URL accorciato vuole utilizzando il codice HTML 5 caratteristiche di storia you can see the code here (date un'occhiata al HistoryManager), in questo caso specifico che stanno usando .replaceState() per sostituire l'URL è andato con quello diretto disponibile.

Nota: Questa risposta non può essere valido in seguito (il bit specifico WebKit), come altri browser supportano HTML5 presenta sempre di più questo può diventare rapidamente obsoleti.

+0

Grande scoperta Nick. Una nota a margine è che probabilmente è una caratteristica specifica di WebKit in quanto funziona allo stesso modo in Safari. – anddoutoi

+0

@anddoutoi - Non ho Safari da testare :) Aggiornerò per includere questo ... e una nota che questa risposta potrebbe essere superata velocemente poiché gli altri supportano sempre più i bit HTML5. –

+0

È interessante notare che il nuovo design di Twitter in un browser Webkit ** non ** segue lo stesso schema che stiamo vedendo su Facebook, ovvero sto ancora vedendo '/ #!' Negli URL di Twitter ma non negli URL di Facebook . – chigley

0

Per gli sviluppatori di MooTools, consiglio di provare il plug-in mootools-history di cpojer che fornisce supporto per l'API della cronologia nativa quando disponibile, con un fallback per gli hash.

Problemi correlati