Rejestrowanie service workera z HTML
Rejestrowanie service workera za pomocą znacznika skryptu i API navigator
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.
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
- Manifest aplikacji internetowej
- Rejestrowanie service workera z HTML
- Kolor motywu i ikony aplikacji
- Strona zastępcza offline