Poznajemy History API, lekcja krótka, łatwa i przyjemna, kontynuujemy poznawanie HTML/CSS/JS. Do dzieła.

Ok, History API ma trzy properties:

  • length: ilość elementów w historii przeglądarki
  • state: stan top-level elementu (głupota, ale jak chcemy podejrzeć, jak wyglądają stany to mamy, stanem może być każdy serializowalny obiekt)
  • scrollRestoration: jedynie nie read-only property, teoretycznie ma sprawiać, że jak ustawimy na manual, to wracanie tam historią nie sprawi, że scroll będzie tam, gdzie był:
if (history.scrollRestoration) {
  history.scrollRestoration = "manual";
}

W praktyce różnie to bywa.

Ok, metody do zmieniania stron:

  • back – do tyłu
  • forward – do przodu
  • go – od tyłu lub przodu i pozwala wybrać o ile (poprzednie bez parametrów)
history.forward();
history.back();
history.go(2);
history.go(-2);

Metody do pracy z zawartością historii, wywołujące PopState Event:

  • pushState
  • replaceState

PushState, czyli chcemy dopisać do historii np. wejście na jakiś query param powiedzmy (przykład z MDN):

const url = new URL(location);
url.searchParams.set("foo", "bar");
history.pushState({}, "", url);

Swoją drogą warto zwrócić uwagę, że to nam dodaje ten searchParam do URLa. Jak nie znamy url api mamy jeszcze jedno wyjście:

let url = window.location.href;
//'https://www.google.pl/'
let withParam = `${url}?q=${encodeURIComponent('hello world')}`;
//'https://www.google.pl/?q=hello%20world'
history.pushState({}, "", withParam);

Swoją drogą nie możemy wpisywać do historii rzeczy z inną domeną, niż ta, na której jesteśmy.