Web Storage API
Die Web Storage API bietet Mechanismen, durch die Browser Schlüssel/Wert-Paare speichern können, auf eine viel intuitivere Weise als mit Cookies.
Konzepte und Verwendung
Die zwei Mechanismen innerhalb des Web Storage sind wie folgt:
-
sessionStorage
hält einen separaten Speicherbereich für jeden gegebenen Origin bereit, der für die Dauer der Sitzung der Seite verfügbar ist (solange der Browser-Tab geöffnet bleibt, einschließlich Seitenreloads und -wiederherstellungen). -
localStorage
erfüllt die gleiche Funktion, bleibt aber auch bestehen, wenn der Browser geschlossen und erneut geöffnet wird.
Diese Mechanismen sind über die Window.sessionStorage
und Window.localStorage
Eigenschaften verfügbar. Der Aufruf einer dieser Eigenschaften gibt eine Instanz eines Storage
-Objekts zurück, über das Datenobjekte gesetzt, abgerufen und entfernt werden können. Ein unterschiedliches Speicherobjekt wird für sessionStorage
und localStorage
für jeden Origin verwendet — sie funktionieren und werden separat gesteuert.
Um mehr über die verfügbare Speichermenge mithilfe der APIs zu lernen und was passiert, wenn Speicherlimits überschritten werden, siehe Storage-Quoten und Löschkriterien.
Sowohl sessionStorage
als auch localStorage
im Web Storage sind synchroner Natur. Dies bedeutet, dass, wenn Daten in diesen Speichermechanismen gesetzt, abgerufen oder entfernt werden, die Operationen synchron durchgeführt werden und die Ausführung anderer JavaScript-Codes blockieren, bis die Operation abgeschlossen ist. Dieses synchrone Verhalten kann potenziell die Leistung der Web-Anwendung beeinträchtigen, insbesondere wenn eine große Datenmenge gespeichert oder abgerufen wird.
Entwickler sollten vorsichtig sein, wenn sie Operationen mit sessionStorage
oder localStorage
durchführen, die eine erhebliche Datenmenge oder rechenintensive Aufgaben beinhalten. Es ist wichtig, den Code zu optimieren und synchrone Operationen zu minimieren, um die Benutzeroberfläche nicht zu blockieren und Verzögerungen in der Reaktionsfähigkeit der Anwendung zu verhindern.
Asynchrone Alternativen, wie beispielsweise IndexedDB, könnten geeigneter für Szenarien sein, in denen Leistung von Bedeutung ist oder wenn mit größeren Datensätzen gearbeitet wird. Diese Alternativen ermöglichen nicht-blockierende Operationen, die flüssigere Benutzererfahrungen und bessere Leistung in Webanwendungen bieten.
Hinweis: Der Zugriff auf Web Storage aus Third-Party-IFrames wird verweigert, wenn der Benutzer Third-Party-Cookies deaktiviert hat.
Bestimmung des Speicherzugriffs durch Dritte
Jeder Origin hat seinen eigenen Speicher — dies gilt sowohl für Web Storage als auch für Shared Storage. Der Zugriff von Third-Party- (also eingebettetem) Code auf geteilten Speicher hängt von seinem Browsing-Kontext ab. Der Kontext, in dem ein Third-Party-Code eines anderen Origins ausgeführt wird, bestimmt den Speicherzugriff des Third-Party-Codes.
Third-Party-Code kann einer anderen Website hinzugefügt werden, indem er mit einem <script>
-Element injiziert wird, oder indem die Quelle eines <iframe>
auf eine Website eingestellt wird, die Third-Party-Code enthält. Die Methode, die zur Integration von Third-Party-Code verwendet wird, bestimmt den Browsing-Kontext des Codes.
- Wenn Ihr Third-Party-Code mit einem
<script>
-Element zu einer anderen Seite hinzugefügt wird, wird Ihr Code im Browsing-Kontext des Einbettenden ausgeführt. Daher wird, wenn SieStorage.setItem()
oderSharedStorage.set()
aufrufen, das Schlüssel/Wert-Paar im Speicher des Einbettenden geschrieben. Aus der Sicht des Browsers gibt es keinen Unterschied zwischen First-Party-Code und Third-Party-Code, wenn ein<script>
-Tag verwendet wird. - Wenn Ihr Third-Party-Code innerhalb eines
<iframe>
zu einer anderen Seite hinzugefügt wird, wird der Code innerhalb des<iframe>
mit dem Origin des Browsing-Kontexts des<iframe>
ausgeführt. Ruft der Code innerhalb des<iframe>
Storage.setItem()
auf, werden die Daten in den lokalen oder Session Storage des Origins des<iframe>
geschrieben. Wenn der<iframe>
-CodeSharedStorage.set()
aufruft, werden die Daten in den Shared Storage des Origins des<iframe>
geschrieben.
Web Storage Schnittstellen
Storage
-
Ermöglicht es Ihnen, Daten für eine bestimmte Domain und einen bestimmten Speichertyp (Session oder Lokal) zu setzen, abzurufen und zu entfernen.
Window
-
Die Web Storage API erweitert das
Window
-Objekt mit zwei neuen Eigenschaften —Window.sessionStorage
undWindow.localStorage
— die Zugriff auf die Session- und lokalenStorage
-Objekte der aktuellen Domain bieten und einenstorage
-Ereignis-Handler, der ausgelöst wird, wenn sich ein Speicherbereich ändert (z.B. wenn ein neuer Eintrag gespeichert wird). StorageEvent
-
Das
storage
-Ereignis wird auf demWindow
-Objekt eines Dokuments ausgelöst, wenn sich ein Speicherbereich ändert.
Beispiele
Um einige typische Anwendungsfälle von Web Storage zu veranschaulichen, haben wir ein einfaches Beispiel erstellt, das kreativ Web Storage Demo genannt wird. Die Startseite bietet Steuerungen, mit denen die Farbe, die Schriftart und das dekorative Bild angepasst werden können. Wenn Sie verschiedene Optionen wählen, wird die Seite sofort aktualisiert; zusätzlich werden Ihre Entscheidungen in localStorage
gespeichert, sodass Ihre Entscheidungen gespeichert werden, wenn Sie die Seite verlassen und später erneut laden.
Des Weiteren haben wir eine Ereignisausgabeseite bereitgestellt — wenn Sie diese Seite in einem anderen Tab laden und dann Änderungen an Ihren Entscheidungen auf der Startseite vornehmen, wird die aktualisierte Speichernformation ausgegeben, sobald das StorageEvent
ausgelöst wird.
Spezifikationen
Specification |
---|
HTML Standard # dom-localstorage-dev |
HTML Standard # dom-sessionstorage-dev |
Browser-Kompatibilität
api.Window.localStorage
BCD tables only load in the browser
api.Window.sessionStorage
BCD tables only load in the browser
Private Browsing / Inkognito-Modus
Private Fenster, der Inkognito-Modus und ähnlich benannte Datenschutzoptionen speichern keine Daten wie Verlauf und Cookies. Im privaten Modus wird localStorage
wie sessionStorage
behandelt. Die Storage-APIs sind weiterhin verfügbar und vollständig funktional, aber alle im privaten Fenster gespeicherten Daten werden gelöscht, wenn der Browser oder der Browser-Tab geschlossen wird.