Nasłuchiwanie zdarzeń storage
Reagowanie na zmiany magazynu między kartami za pomocą zdarzenia storage
Nasłuchiwanie zdarzeń storage to bezpłatna lekcja HTML Academy na CoddyKit. To lekcja 3 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.
Komunikacja między kartami
Web Storage wywołuje zdarzenie storage na każdej innej karcie tego samego originu za każdym razem, gdy zmienia się localStorage. Jest to najprostszy sposób na synchronizowanie wielu otwartych kart tej samej aplikacji — na przykład przekazywanie informacji o wylogowaniu lub zmianie motywu.
Rejestrowanie odbiornika zdarzeń
Program obsługi należy podłączyć do obiektu window: window.addEventListener("storage", handleStorage). Odbiornik jest wywoływany tylko w innych kartach lub oknach tego samego originu — nigdy w karcie, która sama wykonała zmianę i już wie o aktualizacji.
window.addEventListener("storage", (e) => {
console.log("key:", e.key, "new:", e.newValue);
});Właściwości StorageEvent
Zdarzenie zawiera key (zmieniony klucz), oldValue i newValue (ciągi znaków lub null), url (stronę, która wywołała zmianę) oraz storageArea (obiekt Storage — localStorage lub sessionStorage).
clear() ustawia key na null
Gdy inna karta wywoła localStorage.clear(), zdarzenie storage zostanie wywołane raz z wartością key === null, a zarówno oldValue, jak i newValue będą miały wartość null. Należy wykrywać ten wzorzec, aby obsługiwać masowe czyszczenie oddzielnie od aktualizacji pojedynczego klucza.
Działanie removeItem
Wywołanie removeItem powoduje wywołanie zdarzenia z wartością newValue === null, podczas gdy oldValue zawiera poprzedni ciąg znaków. Usunięcie klucza należy odróżniać od ustawienia klucza na ciąg znaków "null", sprawdzając, czy newValue jest dokładnie wartością null, a nie ciągiem znaków "null".
Ograniczenie dla tej samej karty
Zdarzenie nigdy nie jest wywoływane w karcie, która zapisała zmianę. Aby reagować na własne zapisy, należy po setItem wysłać zdarzenie niestandardowe albo opakować setItem w pomocniczą funkcję, która wywołuje zarówno API Storage, jak i wewnętrzną magistralę zdarzeń aplikacji.
function setItem(key, val) {
localStorage.setItem(key, val);
window.dispatchEvent(new CustomEvent("local-storage", { detail: { key, val } }));
}Wylogowanie między kartami
Podczas wylogowywania użytkownika należy ustawić klucz taki jak auth:logout wraz ze znacznikiem czasu. Inne karty nasłuchują tego klucza w zdarzeniu storage i natychmiast czyszczą własny stan sesji, przekierowując użytkownika na stronę logowania bez konieczności ponownego klikania.
Synchronizacja motywu i preferencji
Gdy użytkownik przełącza motyw w jednej karcie, należy zapisać theme w localStorage. Program obsługi zdarzenia storage w każdej innej karcie odczytuje nową wartość i stosuje document.documentElement.dataset.theme — zmiana natychmiast pojawia się we wszystkich otwartych kartach.
Filtrowanie według klucza
Jeden program obsługi może obsługiwać wiele funkcji, rozgałęziając działanie na podstawie e.key. Instrukcja switch ułatwia zachowanie czytelności mechanizmu rozdzielającego: każdy przypadek obsługuje jeden klucz magazynu i ignoruje niezwiązane zmiany zapisywane przez inne funkcje w tym samym obiekcie Storage.
sessionStorage nie działa między kartami
sessionStorage jest przypisany do karty — jego zapisy nigdy nie wywołują zdarzeń storage w innych kartach, ponieważ mają one własne, niezależne magazyny sessionStorage. Gdy potrzebna jest sygnalizacja między kartami, należy użyć localStorage, nawet jeśli klucz zostanie natychmiast usunięty.
Alternatywa dla BroadcastChannel
Do bardziej rozbudowanej komunikacji między kartami API BroadcastChannel przesyła dane strukturalne bez korzystania z magazynu: new BroadcastChannel("app").postMessage({ type: "logout" }). BroadcastChannel należy stosować do sygnałów tymczasowych, a zdarzenia storage do stanu, który powinien być również zachowany.
Sprawdzenie wiedzy
Jeśli karta A wywoła localStorage.setItem("theme", "dark"), które karty otrzymają zdarzenie storage?
Podsumowanie
Zdarzenie storage dostarcza powiadomienia między kartami za każdym razem, gdy localStorage zmieni się w innej karcie, i zawiera key, oldValue, newValue oraz storageArea. Nie jest wywoływane w karcie zapisującej zmianę, dlatego aby obsługiwać zarówno lokalne, jak i zdalne wywołania, należy połączyć je ze zdarzeniem niestandardowym. Można go używać do przekazywania informacji o wylogowaniu, synchronizacji motywu i obsługi dowolnego stanu, który powinien pozostać spójny między oknami przeglądarki.
Często zadawane pytania
Czy lekcja „Nasłuchiwanie zdarzeń storage” jest bezpłatna?
Tak — pełny tekst „Nasłuchiwanie zdarzeń storage” 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 „Nasłuchiwanie zdarzeń storage”?
Reagowanie na zmiany magazynu między kartami za pomocą zdarzenia storage Ć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 3 z 4.
Ile czasu zajmuje lekcja „Nasłuchiwanie zdarzeń storage”?
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
- localStorage a sessionStorage
- Pobieranie, ustawianie i usuwanie elementów
- Nasłuchiwanie zdarzeń storage
- Bezpieczeństwo — czego nigdy nie przechowywać w magazynie