HTML Academy · Lekcja

Navigation API w nowoczesnych przeglądarkach

Używanie Navigation API do przechwytywania i dostosowywania nawigacji

Lekcja 4 z 414 kroki

Navigation API w nowoczesnych przeglądarkach to bezpłatna lekcja HTML Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej HTML Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs HTML Academy zawiera 4 lekcji w sumie.

Nowoczesny zamiennik

Navigation API to nowszy i bardziej rozbudowany zamiennik History API. Traktuje nawigacje jako obiekty pierwszej klasy, które można przechwytywać, anulować i obsługiwać za pomocą await — jest bliższe temu, jak SPA rzeczywiście muszą obsługiwać routing w 2024 roku.

Obiekt window.navigation

window.navigation udostępnia listę wpisów, bieżący wpis oraz zdarzenie navigate. navigation.entries() zwraca każdy wpis w bieżącej historii; navigation.currentEntry to aktywny wpis. Dla porównania History API udostępnia nieprzejrzystą długość oraz nieodczytany stan.

Zdarzenie navigate

Należy nasłuchiwać zdarzenia navigation.addEventListener("navigate", handler), aby przechwytywać każdą nawigację w obrębie tego samego dokumentu — kliknięcia odnośników, wysyłanie formularzy, nawigację wstecz i do przodu oraz nawigację programową. Jeden punkt obsługi zastępuje niespójny zestaw przechwytywania kliknięć, popstate i detektorów wysyłania formularzy.

navigation.addEventListener("navigate", (e) => {
  if (!e.canIntercept) return;
  e.intercept({
    handler: async () => {
      await renderPage(new URL(e.destination.url).pathname);
    }
  });
});

intercept i handler

Wywołanie e.intercept({ handler }) przejmuje obsługę nawigacji. Handler zwraca promise; dopóki oczekuje on na rozstrzygnięcie, nawigacja jest „w toku”, a URL został już zaktualizowany. Rozwiązuje to problem wyścigu między zmianą URL a renderowaniem widoku, który wcześniej trzeba było obsługiwać osobno.

Sprawdzanie canIntercept

Nie wszystkie nawigacje można przechwycić (np. nawigacji między różnymi originami ani pobierania plików). Przed wywołaniem intercept należy sprawdzić e.canIntercept. Ta ochronna kontrola w jednym wierszu odróżnia nawigację SPA od rzeczywistego opuszczenia witryny na rzecz innego originu.

Metoda navigation.navigate

navigation.navigate(url, options) programowo wywołuje nawigację, tak jak kliknięcie. Zwracany obiekt zawiera promisy committed i finished, dzięki czemu można zaczekać na zmianę URL albo na pełne ukończenie handlera.

Stan i klucze wpisu

Każdy wpis nawigacji ma stabilny key (zachowywany między przeładowaniami) oraz id (unikatowy w ramach sesji). Klucza należy używać dla stanu trwałego (zapisanych pozycji przewinięcia i wersji roboczych formularzy), a id dla stanu tymczasowego. Jedyne, co History API udostępniało, było nieprzejrzystym blokiem danych.

Nawigacja wstecz i do przodu

navigation.back() i navigation.forward() to pomocnicze opakowania wokół traverseTo. Zwracają tę samą parę promisów { committed, finished }, dzięki czemu można zaczekać na zakończenie nawigacji wstecz przed wykonaniem kolejnych czynności.

Przerywanie nawigacji

Jeśli użytkownik kliknie drugi odsyłacz, gdy pierwszy jest jeszcze renderowany, trwającą nawigację można przerwać. Procedura obsługi otrzymuje obiekt AbortSignal za pośrednictwem e.signal; należy przekazać go do wywołań fetch, aby nieaktualne operacje zostały anulowane wraz z rozpoczęciem nowej nawigacji.

e.intercept({
  handler: async () => {
    const data = await fetch(url, { signal: e.signal });
    renderPage(await data.json());
  }
});

Dlaczego po prostu nie użyć History?

History API działa, ale jest niewygodne: zmiany stanu i renderowanie widoku są rozdzielone, obsługę kliknięć trzeba implementować ręcznie, koordynacja wielu odbiorników jest zawodna, a przywracanie pozycji przewijania jest niepełne. Navigation API od początku projektowano z myślą o potrzebach SPA i rozwiązuje każdy z tych problemów.

Obsługa w przeglądarkach

Chrome i Edge obsługują Navigation API. Safari i Firefox pozostają w tyle (na początku 2026 roku); należy dostarczać kod, który wykrywa funkcję ("navigation" in window) i w razie jej braku korzysta z History oraz popstate. Frameworki takie jak SvelteKit i TanStack Router już opakowują to wykrywanie.

Kiedy wdrożyć

W nowych projektach kierowanych przede wszystkim do użytkowników Chromium warto wdrożyć to rozwiązanie już teraz i zaakceptować fallback oparty na History. W publicznych witrynach przeznaczonych dla szerokiego grona odbiorców lepiej poczekać na obsługę w Safari i Firefoxie (albo użyć biblioteki routera, która abstrahuje oba rozwiązania). Prostota tego API jest warta oczekiwania.

Sprawdź swoją wiedzę

Jaka jest główna przewaga zdarzenia navigate w Navigation API nad połączeniem popstate z History API i ręcznym przechwytywaniem kliknięć?

Podsumowanie

Navigation API ujednolica nawigację SPA za pomocą pojedynczego zdarzenia navigate, oferując semantykę przechwytywania i przerywania, stabilne klucze poszczególnych wpisów oraz oczekiwanie na asynchroniczne procedury obsługi. Zastępuje połączenie History, popstate i ręcznego przechwytywania kliknięć. Obecnie jest obsługiwane w przeglądarkach Chromium; do czasu nadrobienia zaległości przez Safari i Firefox należy wykrywać dostępność funkcji i stosować fallback oparty na History w kodzie wieloprzeglądarkowym.

Bezpłatny start

Ucz się HTML dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
40
Lekcje
159

Często zadawane pytania

Czy lekcja „Navigation API w nowoczesnych przeglądarkach” jest bezpłatna?

Tak — pełny tekst „Navigation API w nowoczesnych przeglądarkach” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu HTML Academy, przejdź na CoddyKit PRO. Kurs HTML Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Navigation API w nowoczesnych przeglądarkach”?

Używanie Navigation API do przechwytywania i dostosowywania nawigacji Ćwiczysz HTML Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć HTML Academy?

Nie wymagamy żadnego doświadczenia. HTML Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Navigation API w nowoczesnych przeglądarkach”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji HTML Academy?

Tak. Każda lekcja HTML Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. pushState i replaceState
  2. Zdarzenie popstate
  3. Routing oparty na haszu a routing oparty na ścieżce
  4. Navigation API w nowoczesnych przeglądarkach
← Powrót do HTML Academy