0Pricing
HTML Academy · Lekcja

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

  1. localStorage a sessionStorage
  2. Pobieranie, ustawianie i usuwanie elementów
  3. Nasłuchiwanie zdarzeń storage
  4. Bezpieczeństwo — czego nigdy nie przechowywać w magazynie
← Powrót do HTML Academy