Dies ist eine alte Frage, aber es scheint, dass keine der obigen Antworten perfekt ist.
Wenn Sie Authentifizierungsdaten oder andere sensible Informationen speichern möchten, die erst beim Schließen des Browsers vernichtet werden, können Sie sich auf sessionStorage
y localStorage
für die tabellenübergreifende Nachrichtenübermittlung.
Der Grundgedanke ist folgender:
- Sie booten von keiner zuvor geöffneten Registerkarte, so dass sowohl Ihre
localStorage
y sessionStorage
leer sind (wenn nicht, können Sie die localStorage
). Sie müssen einen Nachrichten-Ereignis-Listener auf der localStorage
.
- Der Benutzer authentifiziert/erstellt eine sensible Information auf dieser Registerkarte (oder einer anderen auf Ihrer Domäne geöffneten Registerkarte).
- Sie aktualisieren die
sessionStorage
um die sensiblen Informationen zu speichern, und verwenden Sie die localStorage
um diese Informationen zu speichern, und löschen Sie sie dann (der Zeitpunkt spielt hier keine Rolle, da das Ereignis in die Warteschlange gestellt wurde, als sich die Daten änderten). Jede andere Registerkarte, die zu diesem Zeitpunkt geöffnet ist, wird durch das Nachrichtenereignis zurückgerufen und aktualisiert ihre sessionStorage
mit den sensiblen Informationen.
- Wenn der Benutzer eine neue Registerkarte auf Ihrer Domäne öffnet, wird seine
sessionStorage
leer sein wird. Der Code muss einen Schlüssel in der Datei localStorage
(z.B.: req
). Jede(r) andere Reiter wird im Nachrichtenereignis zurückgerufen, sieht diesen Schlüssel und kann mit den sensiblen Informationen aus seinem sessionStorage
(wie in 3), wenn sie solche haben.
Bitte beachten Sie, dass diese Regelung nicht abhängig ist von window.onbeforeunload
Ereignis, das anfällig ist (da der Browser geschlossen/abgestürzt werden kann, ohne dass diese Ereignisse ausgelöst werden). Außerdem wird die Zeit, in der die sensiblen Informationen in der localStorage
ist sehr klein (da Sie sich auf die Erkennung von Transcients für das Ereignis "Cross Tab Message" verlassen), so dass es unwahrscheinlich ist, dass solche sensiblen Informationen auf der Festplatte des Benutzers verloren gehen.
Hier sehen Sie eine Demo dieses Konzepts: http://jsfiddle.net/oypdwxz7/2/