Próbuję zaimplementować przeglądanie zawartości tak, jak dzieje się to na Facebooku, gdy użytkownik przegląda zdjęcia. Sądzę, że każdy jest zaznajomiony z przeglądaniem zdjęć, w którym można kliknąć "następny" i "poprzedni" i natychmiast uzyskać następne lub poprzednie zdjęcie (można również nawigować za pomocą klawiszy strzałek).Strona "Przekierowanie" bez odświeżania (styl zdjęć na Facebooku)
Po kliknięciu "Dalej" na przykład zauważysz, że strona nie odświeża się - tylko zawartość. Na początku myślałem, że jest to wykonywane przy użyciu zwykłych wywołań ajaxowych, które odświeżają tylko "treść" w tym przypadku obraz, opis i komentarze. Ale potem zauważyłem, że adres URL na pasku narzędzi "Lokalizacja" mojej przeglądarki został zmieniony! Próbowałem sprawdzić to za pomocą Firebuga i odkryłem, że po kliknięciu "dalej" tylko kolejne zdjęcie zostanie pobrane i nadal nie wiem skąd pochodzą meta dane obrazu (opis, czas, tagi, ...) załadowany.
Czy ktoś może wyjaśnić, jak ta technika jest wykonywana - zmiany adresu URL strony bez odświeżania strony (lub nawet bez "migania" strony, jeśli odświeża się z pamięci podręcznej). Wiem, jak zmienić zawartość strony za pomocą ajax, ale URL tej strony pozostaje taki sam przez cały czas. Jeśli kliknę przycisk "odśwież", otrzymam ponownie pierwszą stronę. Ale nie na Facebooku, ponieważ nawet "window.location" zmienia się za każdym razem bez rzeczywistego przekierowania.
Inną rzeczą, którą zauważyłem jest to, że dolny pasek narzędzi (aplikacje, czat, ...) jest "zawsze na wierzchu". Nawet jeśli zmienisz stronę, ten pasek narzędzi nie jest odświeżany i zawsze pozostaje na wierzchu - nawet nie "miga" tak jak inne strony, które są odświeżane (z serwera WWW lub z lokalnej pamięci podręcznej). Chyba jest to ta sama technika co powyżej - jakieś "fałszywe" przekierowania czy coś takiego?
odpowiedź jest pushState
if (window.history.pushState)
window.history.pushState([object or string], [title], [new link]);
Będziesz uśmiechnąć :)
Na co warto [window.onhashchange() History.js] (https://github.com/balupton/History.js) udostępnia ten sam interfejs API HTML5, jednocześnie elegancko degradując każdą przeglądarkę, która go nie obsługuje (w tym obsługę danych i tytułów oraz funkcję replaceState). Używanie tego oznaczałoby, że nie musiałbyś zmieniać swojego kodu dla zmian IE9. – balupton