2010-11-07 16 views
9

Zastanawiam się, w jaki sposób Facebook zmienia adres URL, gdy przełączam się między obrazami w albumie? Nie ma hash-tag, tylko prawdziwy URL.Zmień adres URL przez JavaScript (bez hash-tag)

Przykład: aktualny adres URL: facebook.com/photo.php?fbid=XXXXXX1 a jeśli kliknę obok zmienia URL do facebook.com/photo.php?fbid=XXXXXX2

Czy ktoś wie jak zrealizować to za pomocą JavaScript?

Odpowiedz

9

Tak. Zapoznaj się z https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history#Adding_and_modifying_history_entries

Przekazuje nowy stan historii (rzecz HTML5) zamiast używać klawisza mieszania.

+0

Dzięki. Czy to działa także w innych przeglądarkach? – daniel

+0

Czy ta praca może być crossdomain ?, jeśli tak, to każda strona może udawać inną stronę :(Look everywere. –

+0

@ JamesM-SiteGen: Nie, to nie działa crossdomains, jak podano w linku dostarczonym przez Matthew Browna: "Nowy adres URL musi być tego samego pochodzenia co bieżący URL;" –

0

Na moich testów, a jedynie zmienia hash tag:

np prawdziwy URL:

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

i kliknięciu przycisku Dalej powoduje:

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

elementu po mieszania jest ustawiony na Google AJAX crawl. Ale dla celów przeglądarki jest to tylko skrót (identyfikator fragmentu).

+0

Mhh, ale mój Firefox 4 (beta) nie pokazuje mi skrótu ?! – daniel

+0

Zauważyłem, że aktualizuje on skrót, który jest bardzo podobny do adresu URL, więc jest mylący. –

+0

@dan, masz rację, robi się coś innego w Firefoksie 4. Hash nie jest używany, a pasek adresu nigdy się nie zmienia, ale jeśli utrzymam powłokę otwartą, aktualizacje 'window.location'. –

1

Moje pierwsze przeczucie byłoby:

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

Z pewnym sposobem zapobiegania akcję domyślną stronę reload.

+1

Nie można zapobiec przeładowaniu po zmianie adresu URL (z wyjątkiem hash). –

+0

Dzięki za cynk, to była tylko teoria. –

+0

ReferenceError: facebook nie jest zdefiniowany :) nie jest ciągiem znaków :) I w tym przypadku powinien mieć "http: // na początku –

1

Summerizing wszystkie odpowiedzi,

możemy powiedzieć (nie jestem koderem FB), że Facebook wykorzystuje:

  • HTML5 window.history.pushState/replaceState/popState metody na przeglądarce, które obsługują te metody (myślę, że jeden jest Chrome). W ten sposób Facebook zmienia prawdziwy adres URL (a nie tylko część po znaku #).

  • Na innych przeglądarek, które nie obsługują tych nowych metod HTML5 (jak IE6/IE7 i IE8), Facebook po prostu zmienia część adresu URL po znaku #, po prostu ustawiając właściwość window.location.hash.

Powiązane problemy