2010-11-07 13 views
9

Mi chiedo in che modo Facebook cambia l'URL quando passo alle immagini di un album? Non esiste un hash-tag, solo un vero URL.Modifica url tramite JavaScript (senza tag hash)

Esempio: l'URL corrente: facebook.com/photo.php?fbid=XXXXXX1 e se clicco prossimo, l'URL cambia a facebook.com/photo.php?fbid=XXXXXX2

Qualcuno sa come realizzarlo con JavaScript?

risposta

9

Sì. Partenza https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history#Adding_and_modifying_history_entries

Spinge un nuovo stato della cronologia (una cosa HTML5) invece di utilizzare la chiave hash.

+0

Grazie Fa questo lavoro in altri browser anche – daniel

+0

Può questo lavoro crossdomain Se sì allora? qualsiasi sito può fingere di essere un altro sito :(Guarda tutti. –

+0

@ JamesM-SiteGen: No, non funziona crossdomains, come indicato nel link fornito da Matthew Brown: "Il nuovo URL deve essere della stessa origine dell'URL corrente;" –

0

Sul mio test, cambia solo l'hash tag:

Ad es la vera URL è:

http://www.facebook.com/photo.php?fbid=x&set=z 

e facendo clic su Avanti si traduce in:

http://www.facebook.com/photo.php?fbid=x&set=z#!/photo.php?fbid=y&set=z&pid=pid&id=id 

La parte dopo l'hash è setup per Google AJAX crawl. Ma per lo scopo del browser, è solo un hash (identificatore di frammento).

+0

Mhh, ma il mio Firefox 4 (beta) non mi mostra l'hash ?! – daniel

+0

Sì, ho notato che aggiorna quell'hash che è molto simile all'URL e quindi confonde. –

+0

@dan, hai ragione, sta facendo qualcosa di diverso su Firefox 4. L'hash non viene usato e la barra degli indirizzi non cambia mai, ma se tengo una shell aperta, gli aggiornamenti di 'window.location'. –

1

La mia prima impressione sarebbe:

document.location = facebook.com/photo.php?fbid=XXXXXX2; 

Con qualche modo di prevenire l'azione di ricaricare la pagina predefinita.

+1

Non c'è modo di impedire una ricarica se si cambia l'URL (tranne l'hash). –

+0

Grazie per il suggerimento, era solo una teoria. –

+0

ReferenceError: facebook non è definito :) non è una stringa :) E in questo caso dovrebbe avere "http: //. Alla partenza –

1

Summerizing tutte le risposte,

possiamo dire (io non sono un programmatore FB) che Facebook utilizza:

  • HTML5 window.history.pushState/replaceState/popState metodi su browser che supporti questi metodi (penso che uno è Chrome). In questo modo Facebook cambia l'URL reale (non solo la parte dopo il carattere #).

  • Su altri browser, che non supportano questi nuovi metodi HTML5 (come IE6/IE7 e IE8), Facebook cambia semplicemente la parte dell'URL dopo il carattere #, impostando semplicemente la proprietà window.location.hash.

Problemi correlati