HTML5 History API - pamiętajmy o historii!
Czym jest HTML5? Na pewno nie jest tym, z czym można go było kiedyś identyfikować - językiem znaczników. W dzisiejszych czasach pod pojęciem HTML5 kryje się cała masa API, czyli interfejsów pomocnych w tworzeniu interaktywnych i multimedialnych webowych aplikacji, którym z pomocą przychodzi Javascript, a dopełnia CSS3. Dziś na ruszt pójdzie jedno z wielu ciekawych działów nowego HTML5, mianowicie History API.
History API, jak sama nazwa wskazuje, odpowiada za historię Twojej przeglądarki. Najprościej rzecz ujmując sprowadza się to do dwóch przycisków "poprzednia strona" i "następna strona", sterujących historią w przeglądarce i umożliwiających poruszanie się po niej. Z punktu widzenia Javascriptu do dyspozycji mieliśmy
Historia przeszłości

window.history.go()
, za pomocją którego można było poruszać się do przodu (window.history.go(1)
) i do tyłu (window.history.go(-1)
) w historii stron przeglądanych przez użytkownika. Dedykowane metody do poruszania się po historii o jedną stronę do przodu i tyłu to odpowiednio: window.history.forward()
oraz window.history.back()
. Oczywiście można też było wywołać stronę z historii, jeśli wiedzieliśmy gdzie dokładnie się znajduje, za pomocą konkretnej liczby: window.history.go(liczba)
. Ilość elementów w historii można było sprawdzić za pomocą window.history.length
.Historia przyszłości
Teraz do dyspozycji mamy trochę więcej - oprócz samego poruszania się po historii, HTML5 pozwala nam także na jej modyfikację. Do tego przydadzą nam się dwie metody:history.pushState()
oraz history.replaceState()
. Pierwsza pozwala na dodanie do historii elementu tak, jakby użytkownik wpisał adres w pasku przeglądarki, dzięki drugiej możliwa jest modyfikacja wybranej strony z historii. Metody te powiązane są z eventem window.onpopstate
, który uruchamiany jest w momencie modyfikacji historii.history.pushState() i history.replaceState()
MetodapushState
przyjmuje trzy parametry: obiekt stanu, tytuł oraz URL. Ten pierwszy jest obiektem Javascript powiązanym z nowym elementem historii stworzonym przez metodę pushState
. Drugi element, czyli tytuł, w tym momencie jest nieobsługiwany. Trzeci element, czyli adres URL, to link do nowej strony. Metoda replaceState
jest bardzo podobna do poprzedniej, z tą różnicą, iż replaceState
zamiast tworzyć nowy element historii, modyfikuje już istniejący.window.onpopstate i history.state
Eventpopstate
uruchamiany jest za każdym razem, gdy zmieniana jest historia przeglądarki - wtedy własność state
zawiera kopię obiektu stanu.Przykład
Załóżmy, że znajdujemy się na stronie http://end3r.com/adres1.html, która wykona poniższy kod Javascript:var obiektStanu = { adres: "drugi"; };To spowoduje wyświetlenie adresu http://end3r.com/adres2.html w pasku przeglądarki, ale nie spowoduje przeładowania strony, ani nawet sprawdzenia czy taka strona w ogóle istnieje.
history.pushState(obiektStanu, "Strona 2", "adres2.html");
Wsparcie przeglądarek
Wsparcie jest całkiem niezłe:history.state
działa w Firefox 4+ i Opera 11.5+, a pushState
i replaceState
w obu wymienionych, a także w Chrome 5+ oraz Safari 5+. Internet Explorera przemilczę...
1Marcin Kłeczek dnia 21.08.2011 o 19:29: