HTML Academy · Lekcja

Rejestrowanie service workera z HTML

Rejestrowanie service workera za pomocą znacznika skryptu i API navigator

Lekcja 2 z 414 kroki

Rejestrowanie service workera z HTML to bezpłatna lekcja HTML Academy na CoddyKit. To lekcja 2 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.

Czym jest service worker

Service worker to plik JavaScript działający w tle, niezależnie od stron, który przechwytuje żądania sieciowe w swoim zakresie. Zapewnia obsługę offline, powiadomienia push, synchronizację w tle oraz szybsze ponowne ładowanie dzięki pamięci podręcznej.

Rejestrowanie

Zarejestruj workera ze skryptu strony: navigator.serviceWorker.register("/sw.js"). Przeglądarka pobiera plik /sw.js, analizuje go, uruchamia jego zdarzenie install i zaczyna przechwytywać żądania w zakresie tej rejestracji.

if ("serviceWorker" in navigator) {
  navigator.serviceWorker.register("/sw.js")
    .then((reg) => console.log("Registered, scope:", reg.scope))
    .catch((err) => console.error("Registration failed:", err));
}

Najpierw wykryj obsługę funkcji

Starsze przeglądarki nie obsługują service workerów. Zawsze najpierw wykrywaj obsługę funkcji za pomocą "serviceWorker" in navigator, zanim wywołasz register, ponieważ w przeglądarkach bez tego API wywołanie zgłosi wyjątek. Polyfillowanie nie jest możliwe — service workerów nie można uzupełnić polyfillem, ponieważ wymagają integracji na poziomie przeglądarki.

Zakres

Zakres to prefiks ścieżki, nad którym worker sprawuje kontrolę. Domyślnie zakresem jest katalog, w którym znajduje się plik workera: /sw.js kontroluje wszystkie adresy URL pod /. Aby zarejestrować workera o głębszym zakresie z pliku znajdującego się w innej lokalizacji, ustaw opcję scope ORAZ udostępnij nagłówek Service-Worker-Allowed.

Gdzie umieścić sw.js

Umieść sw.js w katalogu głównym aplikacji (/sw.js), aby jego domyślny zakres obejmował całą witrynę. Głębsze ścieżki (/app/sw.js) ograniczają zakres do /app/ i jego podkatalogów, co rzadko jest pożądane.

Moment rejestracji

Zarejestruj workera po załadowaniu strony, aby uniknąć konkurowania o przepustowość podczas krytycznego renderowania: window.addEventListener("load", () => navigator.serviceWorker.register("/sw.js")). Funkcje PWA zaczną działać przy kolejnych wizytach bez opóźniania pierwszej wizyty.

Aktualizacje

Przeglądarka automatycznie sprawdza, czy plik sw.js został zaktualizowany (zwykle co 24 godziny i przy większości ładowań stron). Jeśli zawartość pliku się zmieniła, nowy worker jest pobierany i instalowany, a następnie czeka w stanie „waiting”, aż wszystkie istniejące karty zostaną zamknięte — dopiero wtedy zostaje aktywowany.

Wymuszanie aktualizacji

registration.update() ręcznie uruchamia sprawdzanie aktualizacji. self.skipWaiting() w nowym pliku sw.js natychmiast aktywuje workera bez czekania na zamknięcie kart. Połącz te mechanizmy, aby zawsze uruchamiać najnowszą wersję workera, kosztem ponownego pobierania danych w trakcie sesji.

Wyrejestrowywanie

registration.unregister() usuwa workera. Jest to przydatne podczas tworzenia, jeśli wadliwy worker powoduje problemy z witryną. W Chrome DevTools sekcja Application → Service Workers udostępnia przycisk „Unregister” do tego samego celu podczas debugowania.

Częsty błąd

Rejestrowanie workera przez HTTP (bez HTTPS) kończy się niepowodzeniem bez wyraźnego komunikatu — service workery wymagają bezpiecznego źródła (HTTPS lub localhost w środowisku programistycznym). Jeśli rejestracja nie działa, sprawdź w konsoli komunikat „An SSL certificate error occurred”.

Koordynowanie workera i strony

Worker nie ma dostępu do DOM. Aby przekazywać wiadomości, użyj navigator.serviceWorker.controller.postMessage() na stronie i self.addEventListener("message", handler) w workerze (oraz odwrotnie). Jest to przydatne przy unieważnianiu pamięci podręcznej, sprawdzaniu wersji i obsłudze niestandardowych zdarzeń.

Pierwsza wizyta a ponowna wizyta

Podczas pierwszej wizyty worker jest instalowany i zaczyna kontrolować strony dopiero po ich przeładowaniu. Aby przejąć kontrolę nad pierwszą nawigacją od razu, wywołaj self.clients.claim() w zdarzeniu activate — jest to przydatne w aplikacjach działających przede wszystkim offline.

Sprawdzenie wiedzy

Dlaczego service workery muszą być udostępniane przez HTTPS (lub localhost)?

Podsumowanie

Rejestruj service workery z poziomu JavaScriptu strony za pomocą navigator.serviceWorker.register("/sw.js") po wykryciu obsługi funkcji. Umieść sw.js w katalogu głównym aplikacji, aby objąć zakresem całą witrynę. Rejestruj workera podczas zdarzenia load, aby nie konkurował z krytycznym renderowaniem. Aktualizacje są sprawdzane automatycznie okresowo; wymuś je za pomocą registration.update lub skipWaiting. Wymagany jest HTTPS, aby zapobiec wstrzyknięciu złośliwego workera.

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 „Rejestrowanie service workera z HTML” jest bezpłatna?

Tak — pełny tekst „Rejestrowanie service workera z HTML” 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 „Rejestrowanie service workera z HTML”?

Rejestrowanie service workera za pomocą znacznika skryptu i API navigator Ć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 2 z 4.

Ile czasu zajmuje lekcja „Rejestrowanie service workera z HTML”?

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. Manifest aplikacji internetowej
  2. Rejestrowanie service workera z HTML
  3. Kolor motywu i ikony aplikacji
  4. Strona zastępcza offline
← Powrót do HTML Academy