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.
Historia przeszłości
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śmywindow.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: