Ich habe einige Werte auf meiner Website, die ich löschen möchte, wenn der Browser geschlossen wird. Ich habe mich entschieden sessionStorage
, diese Werte zu speichern. Wenn die Registerkarte geschlossen ist, werden sie tatsächlich gelöscht und beibehalten, wenn der Benutzer f5 drückt. Wenn der Benutzer jedoch einen Link auf einer anderen Registerkarte öffnet, sind diese Werte nicht verfügbar.
Wie kann ich sessionStorage
Werte zwischen allen Browser-Registerkarten mit meiner Anwendung teilen ?
Der Anwendungsfall: Legen Sie einen Wert in einen Speicher, lassen Sie diesen Wert auf allen Browser-Registerkarten zugänglich und löschen Sie ihn, wenn alle Registerkarten geschlossen sind.
if (!sessionStorage.getItem(key)) {
sessionStorage.setItem(key, defaultValue)
}
javascript
cross-browser
session-storage
Vladimir Gordienko
quelle
quelle
Antworten:
Sie können localStorage und seinen eventListener "Speicher" verwenden, um sessionStorage-Daten von einer Registerkarte auf eine andere zu übertragen.
Dieser Code muss auf ALLEN Registerkarten vorhanden sein. Es sollte vor Ihren anderen Skripten ausgeführt werden.
Ich habe dies in Chrom, ff, Safari, dh 11, dh 10, dh 9 getestet
Diese Methode "sollte in IE8 funktionieren", aber ich konnte sie nicht testen, da mein IE jedes Mal abstürzte, wenn ich einen Tab öffnete ... einen beliebigen Tab ... auf einer beliebigen Website. (guter alter IE) PS: Sie müssen natürlich einen JSON-Shim einbinden, wenn Sie auch IE8-Unterstützung wünschen. :) :)
Gutschrift geht zu diesem vollständigen Artikel: http://blog.guya.net/2015/06/12/sharing-sessionstorage-between-tabs-for-secure-multi-tab-authentication/
quelle
BroadcastChannel
es jetzt ein gutes Werkzeug dafür. developer.google.com/web/updates/2016/09/broadcastchannelEine Verwendung
sessionStorage
hierfür ist nicht möglich.Aus den MDN-Dokumenten
Das bedeutet, dass Sie nicht zwischen Registerkarten teilen können, dafür sollten Sie verwenden
localStorage
quelle
path='/'
so ändern , dass es beim Schließen des Browserfensters gelöscht wird. Aber für Tabs habe ich momentan keine Ahnung.localStorage
Daten löscht, auftritt , weil jemand auf derselben Registerkarte zu einer anderen Domäne navigiert ? Mir scheint, dies löscht dielocalStorage
Daten fälschlicherweise - die Registerkarte wurde nicht geschlossen, und wenn die Person zurück navigiert, möchte sie die Daten erneut, richtig. Wie auch immer, es ist ein interessanter Ansatz, daran habe ich nicht gedacht: -)Sie können einfach
localStorage
das Datum verwenden und sich daran erinnern, an dem es zum ersten Mal erstellt wurdesession cookie
. WennlocalStorage
"Sitzung" älter als der Wert des Cookies ist, können Sie das löschenlocalStorage
Dies hat den Nachteil, dass jemand die Daten nach dem Schließen des Browsers noch lesen kann. Daher ist dies keine gute Lösung, wenn Ihre Daten privat und vertraulich sind.
Sie können Ihre Daten
localStorage
für einige Sekunden speichern und einen Ereignis-Listener für einstorage
Ereignis hinzufügen . Auf diese Weise wissen Sie, wann eine der Registerkarten etwas in das geschrieben hat,localStorage
und Sie können den Inhalt in das kopierensessionStorage
und dann einfach das löschenlocalStorage
quelle
Wenn Sie in anderen Bereichen mit _blank öffnen, bleibt der sessionStorage so lange erhalten, wie Sie die Registerkarte öffnen, wenn das übergeordnete Element geöffnet ist:
In diesem Link gibt es eine gute jsfiddle, um es zu testen. sessionStorage in neuem Fenster ist nicht leer, wenn Sie einem Link mit target = "_ blank" folgen.
quelle
Meine Lösung, um sessionStorage nicht über Registerkarten übertragen zu können, bestand darin, ein localProfile zu erstellen und diese Variable zu entfernen. Wenn diese Variable festgelegt ist, meine sessionStorage-Variablen jedoch nicht vorhanden sind, werden sie erneut initialisiert. Wenn das Fenster zum Abmelden des Benutzers geschlossen wird, wird diese Variable localStorage zerstört
quelle
Hier ist eine Lösung, um das Scheren von Sitzungen zwischen Browser-Registerkarten für eine Java-Anwendung zu verhindern. Dies funktioniert für IE (JSP / Servlet)
1) erste Seite JS
2) gemeinsames JS für alle Seiten
3) web.xml - Servlet-Zuordnung
4) Servlet-Code
quelle