Es gibt einen sehr speziellen Anwendungsfall, in dem jeder Vorschlag, sessionStorage anstelle von localStorage zu verwenden, nicht wirklich hilft. Der Anwendungsfall wäre etwas so Einfaches wie etwas zu speichern, während Sie mindestens eine Registerkarte geöffnet haben, aber es ungültig machen, wenn Sie die letzte verbleibende Registerkarte schließen. Wenn Sie Ihre Werte tab- und fensterübergreifend speichern wollen, hilft Ihnen sessionStorage nicht weiter, es sei denn, Sie verkomplizieren Ihr Leben mit Listenern, wie ich es versucht habe. In der Zwischenzeit wäre localStorage perfekt dafür, aber es macht den Job 'zu gut', da die Daten dort auch nach einem Neustart des Browsers warten. Am Ende habe ich einen benutzerdefinierten Code und eine Logik verwendet, die die Vorteile von beidem nutzt.
Ich erkläre lieber, als Code zu geben. Speichern Sie zunächst, was Sie brauchen, in localStorage, dann auch in localStorage erstellen Sie einen Zähler, der die Anzahl der Registerkarten, die Sie geöffnet haben, enthalten wird. Dieser Zähler wird jedes Mal erhöht, wenn die Seite geladen wird, und jedes Mal verringert, wenn die Seite entladen wird. Sie können sich hier die Ereignisse aussuchen, die Sie verwenden möchten, ich würde "load" und "unload" vorschlagen. Zum Zeitpunkt des Entladens müssen Sie die Aufräumarbeiten durchführen, die Sie durchführen möchten, wenn der Zähler 0 erreicht, d. h. wenn Sie die letzte Registerkarte schließen. Jetzt kommt der schwierige Teil: Ich habe keinen zuverlässigen und allgemeinen Weg gefunden, um den Unterschied zwischen einem Neuladen der Seite oder einer Navigation innerhalb der Seite und dem Schließen der Registerkarte zu erkennen. Wenn die Daten, die Sie speichern, nicht etwas sind, das Sie beim Laden neu aufbauen können, nachdem Sie überprüft haben, dass dies Ihre erste Registerkarte ist, dann können Sie sie nicht bei jeder Aktualisierung entfernen. Stattdessen müssen Sie bei jedem Laden ein Flag in sessionStorage speichern, bevor Sie den Tab-Zähler erhöhen. Bevor Sie diesen Wert speichern, können Sie prüfen, ob er bereits einen Wert hat, und wenn nicht, dann nicht, bedeutet dies, dass Sie zum ersten Mal in diese Sitzung laden, was bedeutet, dass Sie die Bereinigung beim Laden durchführen können, wenn dieser Wert nicht gesetzt ist und der Zähler 0 ist.