Navigation API w nowoczesnych przeglądarkach
Używanie Navigation API do przechwytywania i dostosowywania nawigacji
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.
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
- pushState i replaceState
- Zdarzenie popstate
- Routing oparty na haszu a routing oparty na ścieżce
- Navigation API w nowoczesnych przeglądarkach