2010-10-03 11 views
60

Przejdź do http://www.facebook.com/facebook?v=wall, a następnie kliknij zakładkę Informacje. Zawartość zostanie załadowana, a pasek adresu stanie się teraz http://www.facebook.com/facebook?v=info, ale strona nie przeładowała się ponownie.W jaki sposób Facebook przepisuje źródłowy adres URL strony w pasku adresu przeglądarki?

Na początku myślę, że to Ajax, ale moje pytanie brzmi: jak zmienić pasek adresu bez ponownego ładowania? Wiem, że mogę zmienić anchor (#wall) używając JS, ale querystring (? V = wall), jak?

+2

Widzę dużo głosów i ulubionych, ale ktoś ma odpowiedź? – Snoob

+0

Istnieje również wskaźnik obciążenia w zakładce przeglądarki. – jcubic

+0

Czy ktoś ma answeer? – Snoob

Odpowiedz

64

Używa nowej funkcji HTML5: history.pushState(), aby umożliwić maskowaniu strony pod innym adresem URL niż ten, z którego została pierwotnie pobrana.

Wydaje się, że jest to obecnie obsługiwane tylko przez WebKit, dlatego też reszta z nas widzi ?v=wall#!/facebook?v=info zamiast ?v=info.

Funkcja umożliwia dynamiczne ładowanie stron do zakładek, wymienianie itp. Między obsługiwanymi przez JS i nie obsługującymi JS programami użytkownika. Ponieważ jeśli jako użytkownik JS łączysz kogoś z ?v=wall#!/facebook?v=info, a jego przeglądarka nie obsługuje JS i XMLHttpRequest, strona nie będzie dla nich działać.Model #! jest również używany jako wskazówka dla wyszukiwarek do pobierania wersji innej niż AJAX.

-8

Nie mam Facebooka, więc nie mogę sprawdzić. Ale mam 95% pewności, że musi to być pełne żądanie strony, pasek adresu jest nieodpisywalny, ponieważ byłoby to bardzo przydatną funkcją do absurdowania stron phishingowych (zamiast http://fakeonlinebank.com przepisać na http://yourtrustybank). Prawdopodobnie tak szybko, że twoja przeglądarka wydaje się tylko ładować tę część?

Ale jestem ciekaw, czy ktoś mnie poprawić w tej sprawie, ponieważ oznaczałoby to mają odpowiedź Ty chcesz usłyszeć;)

+0

Dzięki, próbowałem użyć Firebug, aby zmienić coś na facebooku, a następnie kliknąłem kartę informacyjną i co zrobiłem "żywe" -> To nie jest żądanie pełnej strony. – Snoob

+0

Czy mogą używać pamięci po stronie klienta, aby przyspieszyć działanie? – Michael

+0

Z której przeglądarki korzystam w Firefoksie (Macu), to jest adres URL, który kończy się na http://www.facebook.com/facebook?v=wall#!/facebook?v=info, zdecydowanie technika haszowania historii . – Michael

19

@Snoob - Byłbym wdzięczny, gdybyś przyjął @bobince's answer zamiast tego, był na dobrej drodze do omówienia szczegółów. Ponieważ nie mogę tego usunąć/usunąć, dopóki nie zostanie ona zaakceptowana, zaktualizuję ją tak, aby była jak najbardziej poprawna.


Obecnie to WebKit (Chrome, Safari, itp) specyficzna sprawa widzisz (lub raczej, nie widząc), jak @bobince punktów w innych przeglądarkach można zobaczyć prawdziwe URL w pasku:

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

Gdzie Chrome tylko pokazuje:

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

To ma sens, given this is how you make AJAX Content crawlable with the Google search engine, więc ich przeglądarka rozpoznaje skąd pochodzi również treść.

Korekta od specyfiki: przeglądarek Webkit wykazują skróconego URL facebook chce za pomocą HTML 5 Historyczne you can see the code here (Spójrz na HistoryManager) w tym przypadku konkretnie oni używają .replaceState() zastąpić URL Poszedłeś z bezpośrednim dostępnym.

Uwaga: Ta odpowiedź może nie mieć później (specyficzny nieco WebKit), a inne przeglądarki obsługują HTML5 dysponuje coraz to może szybko stać się nieaktualne.

+0

Świetne znalezisko Nicka. Warto zauważyć, że jest to prawdopodobnie specyficzna cecha WebKit, ponieważ działa tak samo w Safari. – anddoutoi

+0

@anddoutoi - Nie mam Safari do testowania :) Zaktualizuję, aby uwzględnić to ... i notatkę, że ta odpowiedź może być nieaktualna szybko, ponieważ inni obsługują bity HTML5 coraz więcej. –

+0

Co ciekawe, patrzenie na nowy projekt Twittera w przeglądarce Webkit ** nie ** zachowuje ten sam wzorzec, który widzimy na Facebooku, tj. Nadal widzę '/ #!' W adresach URL Twittera, ale nie w adresach URL Facebooka . – chigley

0

Dla programistów MooTools zalecam wypróbowanie wtyczki cpojer: mootools-history, która zapewnia wsparcie dla interfejsu API historii macierzystej, o ile jest dostępna, z możliwością powrotu do skrótów.

Powiązane problemy