In che modo Facebook riscrive l’URL di origine di una pagina nella barra degli indirizzi del browser?

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.

All’inizio penso che sia Ajax, ma la mia domanda è, come si cambia la barra degli indirizzi senza ricaricare? So che posso cambiare l’ancora (#wall) usando JS ma querystring (? V = wall), come?

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

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

La funzione consente alle pagine caricate dynamicmente di essere opportunamente segnalate, scambiate ecc. Tra gli agenti utente che supportano JS e non JS. Perché se tu come utente JS hai collegato qualcuno a ?v=wall#!/facebook?v=info e il loro browser non supportava JS e XMLHttpRequest, la pagina non funzionava per loro. Il #! è anche usato come suggerimento per i motori di ricerca per scaricare la versione non AJAX.

@Snoob – Mi piacerebbe che se accettassi la risposta di @ bobince , è 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 ansible.


Al momento è una cosa specifica di WebKit (Chrome, Safari, ecc.) Che stai vedendo (o meglio, che non vedi), come sottolinea @ bobince in altri browser puoi vedere l’URL reale nella barra:

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

Dove Chrome mostra solo:

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

È un po ‘logico, dato che questo è il modo in cui i contenuti AJAX vengono sottoposti a scansione con il motore di ricerca di Google , quindi il loro browser riconosce anche da dove proviene il contenuto.

Correzione delle specifiche: i browser Webkit mostrano l’URL abbreviato di Facebook che vuole utilizzare le funzionalità di cronologia .replaceState() per vedere il codice qui (dare un’occhiata a HistoryManager ) in questo caso in particolare stanno usando .replaceState() per sostituire l’URL sei andato con quello diretto disponibile.

Nota: questa risposta potrebbe non essere valida in seguito (il bit specifico di WebKit), in quanto altri browser supportano le funzionalità HTML5 e questo potrebbe diventare obsoleto rapidamente.

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

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 caratteristica molto utile per i siti Web di phishing (invece di http://fakeonlinebank.com riscrive su http: // yourtrustybank ). Probabilmente è così veloce che il tuo browser sembra caricare solo quella parte?

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