J'ai des valeurs sur mon site que je souhaite effacer lorsque le navigateur est fermé. J'ai choisi sessionStorage
de stocker ces valeurs. Lorsque l'onglet est fermé, ils sont effectivement effacés et conservés si l'utilisateur appuie sur f5; Mais si l'utilisateur ouvre un lien dans un onglet différent, ces valeurs ne sont pas disponibles.
Comment puis-je partager des sessionStorage
valeurs entre tous les onglets du navigateur avec mon application?
Le cas d'utilisation: mettez une valeur dans un espace de stockage, gardez cette valeur accessible dans tous les onglets du navigateur et effacez-la si tous les onglets sont fermés.
if (!sessionStorage.getItem(key)) {
sessionStorage.setItem(key, defaultValue)
}
javascript
cross-browser
session-storage
Vladimir Gordienko
la source
la source
Réponses:
Vous pouvez utiliser localStorage et son eventListener "stockage" pour transférer les données sessionStorage d'un onglet à un autre.
Ce code devrait exister sur TOUS les onglets. Il devrait s'exécuter avant vos autres scripts.
J'ai testé ça en chrome, ff, safari, ie 11, ie 10, ie9
Cette méthode "devrait fonctionner dans IE8" mais je n'ai pas pu la tester car mon IE plantait chaque fois que j'ouvrais un onglet .... n'importe quel onglet ... sur n'importe quel site Web. (bon ol IE) PS: vous devrez évidemment inclure un shim JSON si vous voulez aussi le support IE8. :)
Le crédit va à cet article complet: http://blog.guya.net/2015/06/12/sharing-sessionstorage-between-tabs-for-secure-multi-tab-authentication/
la source
BroadcastChannel
c'est maintenant un bon outil pour faire cela. développeurs.google.comL'utilisation
sessionStorage
pour cela n'est pas possible.À partir des documents MDN
Cela signifie que vous ne pouvez pas partager entre les onglets, pour cela, vous devez utiliser
localStorage
la source
path='/'
forcer ainsi à s'effacer lorsque la fenêtre du navigateur est fermée. Mais pour les onglets, je n'en ai aucune idée pour le moment.localStorage
données se produit parce que quelqu'un accède à un domaine différent, dans le même onglet. Il me semble que cela supprimera incorrectement leslocalStorage
données - l'onglet ne s'est pas fermé, et si la personne revient en arrière, elle voudrait à nouveau les données, à droite. Quoi qu'il en soit, c'est une approche intéressante, je n'y ai pas pensé: -)Vous pouvez simplement utiliser
localStorage
et vous souvenir de la date à laquelle il a été créé pour la première foissession cookie
. LorsquelocalStorage
"session" est plus ancienne que la valeur du cookie, vous pouvez effacer lelocalStorage
L'inconvénient est que quelqu'un peut toujours lire les données après la fermeture du navigateur, ce n'est donc pas une bonne solution si vos données sont privées et confidentielles.
Vous pouvez stocker vos données
localStorage
pendant quelques secondes et ajouter un écouteur d'événement pour unstorage
événement. De cette façon, vous saurez quand l'un des onglets a écrit quelque chose dans lelocalStorage
et vous pouvez copier son contenu dans lesessionStorage
, puis effacez simplement lelocalStorage
la source
En regardant en fait d'autres zones, si vous ouvrez avec _blank, cela conserve le sessionStorage tant que vous ouvrez l'onglet lorsque le parent est ouvert:
Dans ce lien, il y a un bon jsfiddle pour le tester. sessionStorage sur une nouvelle fenêtre n'est pas vide, lorsque vous suivez un lien avec target = "_ blank"
la source
Ma solution pour ne pas avoir sessionStorage transférable sur les onglets était de créer un profil local et de supprimer cette variable. Si cette variable est définie mais que mes variables sessionStorage ne sont pas disponibles, réinitialisez-les. Lorsque l'utilisateur se déconnecte, la fenêtre se ferme, détruit cette variable localStorage
la source
Voici une solution pour éviter le cisaillement de session entre les onglets du navigateur pour une application java. Cela fonctionnera pour IE (JSP / Servlet)
1) première page JS
2) JS commun pour toutes les pages
3) web.xml - mappage de servlet
4) code de servlet
la source