Tenho alguns valores no meu site que desejo limpar quando o navegador estiver fechado. Eu escolhisessionStorage
armazenar esses valores. Quando a guia é fechada, elas são realmente limpas e mantidas se o usuário pressionar f5; Mas se o usuário abrir algum link em uma guia diferente, esses valores não estarão disponíveis.
Como posso compartilhar sessionStorage
valores entre todas as guias do navegador com meu aplicativo?
O caso de uso: coloque um valor em algum armazenamento, mantenha esse valor acessível em todas as guias do navegador e limpe-o se todas as guias estiverem fechadas.
if (!sessionStorage.getItem(key)) {
sessionStorage.setItem(key, defaultValue)
}
javascript
cross-browser
session-storage
Vladimir Gordienko
fonte
fonte
Respostas:
Você pode usar localStorage e seu eventListener de "armazenamento" para transferir dados sessionStorage de uma guia para outra.
Esse código precisaria existir em TODAS as guias. Ele deve ser executado antes dos outros scripts.
Eu testei isso no chrome, ff, safari, ie 11, ie 10, ie9
Este método "deve funcionar no IE8", mas não pude testá-lo, pois meu IE estava travando toda vez que abria uma guia .... qualquer guia ... em qualquer site. (bom ol IE) PS: você obviamente precisará incluir um calço JSON se também desejar suporte ao IE8. :)
O crédito é referente a este artigo completo: http://blog.guya.net/2015/06/12/sharing-sessionstorage-between-tabs-for-secure-multi-tab-authentication/
fonte
BroadcastChannel
agora é uma boa ferramenta para fazer isso. developers.google.com/web/updates/2016/09/broadcastchannelUsar
sessionStorage
para isso não é possível.Dos documentos MDN
Isso significa que você não pode compartilhar entre as guias. Para isso, você deve usar
localStorage
fonte
path='/'
forçá-lo a limpar quando a janela do navegador estiver fechada. Mas para as abas, não tenho idéia no momento.localStorage
dados acontecer, porque alguém navega para um domínio diferente, na mesma guia. Parece-me que isso excluirá oslocalStorage
dados incorretamente - a guia não foi fechada e, se a pessoa voltar, voltará a querer os dados novamente, certo. Enfim, é uma abordagem interessante, não acho de que: -)Você pode simplesmente usar
localStorage
e lembrar a data em que foi criadasession cookie
. QuandolocalStorage
"sessão" é mais antigo que o valor do cookie, você pode limpar olocalStorage
Contras é que alguém ainda pode ler os dados depois que o navegador é fechado, portanto, não é uma boa solução se seus dados são particulares e confidenciais.
Você pode armazenar seus dados
localStorage
por alguns segundos e adicionar um ouvinte destorage
evento a um evento. Dessa forma, você saberá quando alguma das guias escreveu algo para olocalStorage
e poderá copiar seu conteúdo para o esessionStorage
, em seguida, basta limpar olocalStorage
fonte
Na verdade, olhando para outras áreas, se você abrir com _blank, ele manterá o sessionStorage enquanto você estiver abrindo a guia quando o pai estiver aberto:
Neste link, há um bom jsfiddle para testá-lo. sessionStorage na nova janela não está vazia, ao seguir um link com target = "_ blank"
fonte
Minha solução para não ter sessionStorage transferível em guias foi criar um localProfile e extrair essa variável. Se essa variável estiver definida, mas minhas variáveis sessionStorage não forem executadas, reinicialize-as. Quando o usuário efetua logout da janela, destrua essa variável localStorage
fonte
Aqui está uma solução para impedir o corte da sessão entre as guias do navegador para um aplicativo java. Isso funcionará para o IE (JSP / Servlet)
1) primeira página JS
2) JS comum para todas as páginas
3) web.xml - mapeamento de servlet
4) código do servlet
fonte