HTML Academy · Aula

Monitorando eventos de armazenamento

Reaja a alterações de armazenamento entre abas com o evento storage.

Aula 3 de 413 etapas

Monitorando eventos de armazenamento é uma aula grátis de HTML Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de HTML Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de HTML Academy inclui 4 aulas no total.

Comunicação entre abas

O armazenamento da Web dispara um evento de armazenamento em todas as outras abas da mesma origem sempre que o localStorage é alterado. Essa é a maneira mais simples de manter várias abas abertas do mesmo aplicativo sincronizadas — por exemplo, propagando um encerramento de sessão ou uma mudança de tema.

Registrando um ouvinte

Anexe o manipulador a window: window.addEventListener("storage", handleStorage). O ouvinte é disparado somente em outras abas ou janelas da mesma origem — nunca na aba que realizou a alteração, pois ela já sabe da atualização.

window.addEventListener("storage", (e) => {
  console.log("key:", e.key, "new:", e.newValue);
});

Propriedades de StorageEvent

O evento contém key (a chave que mudou), oldValue e newValue (textos ou null), url (a página que disparou a alteração) e storageArea (o objeto de armazenamento — localStorage ou sessionStorage).

clear() define key como null

Quando outra aba chama localStorage.clear(), o evento de armazenamento é disparado uma vez com key === null e tanto oldValue quanto newValue definidos como null. Detecte esse padrão para tratar uma limpeza em massa separadamente das atualizações de uma única chave.

Comportamento de removeItem

Uma chamada a removeItem dispara o evento com newValue === null e oldValue contendo o texto anterior. Diferencie "chave excluída" de "chave definida como o texto null" verificando se newValue é estritamente null, e não o texto "null".

Limitação na mesma aba

O evento nunca é disparado na aba que gravou a alteração. Para reagir às suas próprias gravações, dispare um evento personalizado após setItem ou envolva setItem em uma função auxiliar que chame tanto a API de armazenamento quanto o barramento de eventos do aplicativo.

function setItem(key, val) {
  localStorage.setItem(key, val);
  window.dispatchEvent(new CustomEvent("local-storage", { detail: { key, val } }));
}

Encerramento de sessão entre abas

Defina uma chave como auth:logout com um registro de data e hora quando o usuário sair. As outras abas escutam essa chave no evento de armazenamento e limpam imediatamente o próprio estado da sessão, redirecionando para a página de login sem que o usuário precise clicar novamente.

Sincronização de tema e preferências

Quando o usuário alternar o tema em uma aba, grave theme no localStorage. O manipulador do evento de armazenamento em cada uma das outras abas lê o novo valor e aplica document.documentElement.dataset.theme — a alteração aparece instantaneamente em todas as abas abertas.

Filtrando por chave

Um único manipulador pode atender a vários recursos verificando e.key. Uma instrução de seleção mantém o despachante legível: cada caso trata uma chave de armazenamento e ignora alterações não relacionadas que outros recursos gravam no mesmo objeto de armazenamento.

sessionStorage não atravessa abas

O sessionStorage é específico de cada aba — suas gravações nunca disparam eventos de armazenamento em outras abas, pois elas têm seu próprio sessionStorage independente. Use localStorage quando for necessária sinalização entre abas, mesmo que você remova imediatamente a chave depois.

Alternativa com BroadcastChannel

Para mensagens mais avançadas entre abas, a API BroadcastChannel envia dados estruturados sem tocar no armazenamento: new BroadcastChannel("app").postMessage({ type: "logout" }). Use BroadcastChannel para sinais temporários e eventos de armazenamento para estados que também precisam persistir.

Verificação de conhecimento

Se a Aba A chamar localStorage.setItem("theme", "dark"), quais abas recebem o evento de armazenamento?

Resumo

O evento de armazenamento fornece notificações entre abas sempre que o localStorage é alterado em outra aba, com key, oldValue, newValue e storageArea. Ele não é disparado na aba que grava, portanto combine-o com um evento personalizado para realizar o despacho local e remoto completo. Use-o para propagar encerramentos de sessão, sincronizar temas e manter consistente qualquer estado que deva permanecer igual entre as janelas do navegador.

Grátis para começar

Aprenda HTML com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
40
Aulas
159

Perguntas Frequentes

A aula “Monitorando eventos de armazenamento” é grátis?

Sim — o texto completo de “Monitorando eventos de armazenamento” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de HTML Academy, atualize para CoddyKit PRO. O curso de HTML Academy inclui 4 aulas no total.

O que vou aprender em “Monitorando eventos de armazenamento”?

Reaja a alterações de armazenamento entre abas com o evento storage. Você pratica HTML Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar HTML Academy?

Nenhuma experiência prévia é necessária. HTML Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Monitorando eventos de armazenamento”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de HTML Academy?

Sim. Cada aula de HTML Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. localStorage versus sessionStorage
  2. Obtendo, definindo e removendo itens
  3. Monitorando eventos de armazenamento
  4. Segurança: o que nunca armazenar no armazenamento
← Voltar para HTML Academy