Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit März 2023 browserübergreifend verfügbar.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Hinweis: Diese Funktion ist nur in Dedicated Web Workers verfügbar.
Die createSyncAccessHandle() Methode des FileSystemFileHandle Interfaces gibt ein Promise zurück, das in ein FileSystemSyncAccessHandle Objekt aufgelöst wird, das verwendet werden kann, um synchron auf eine Datei zuzugreifen und sie zu bearbeiten. Die synchrone Natur dieser Methode bringt Leistungsverbesserungen, ist jedoch nur innerhalb dedizierter Web Worker für Dateien im origin private file system nutzbar.
Das Erstellen eines FileSystemSyncAccessHandle nimmt eine exklusive Sperre auf die Datei ein, die mit dem Dateihandle verbunden ist. Dies verhindert die Erstellung weiterer FileSystemSyncAccessHandles oder FileSystemWritableFileStreams für die Datei, bis das bestehende Zugriffshandle geschlossen wird.
Ein Objekt mit den folgenden Eigenschaften:
mode OptionalEin String, der den Sperrmodus für das Zugriffshandle angibt. Der Standardwert ist "readwrite". Mögliche Werte sind:
"read-only"Mehrere FileSystemSyncAccessHandle Objekte können gleichzeitig auf eine Datei geöffnet werden (zum Beispiel bei der Verwendung der gleichen Anwendung in mehreren Tabs), vorausgesetzt, sie werden alle im Modus "read-only" geöffnet. Sobald geöffnet, können leseähnliche Methoden auf den Handles aufgerufen werden — read(), getSize(), und close().
"readwrite"Nur ein FileSystemSyncAccessHandle Objekt kann auf eine Datei geöffnet werden. Der Versuch, weitere Handles zu öffnen, bevor das erste Handle geschlossen ist, führt zu einer NoModificationAllowedError Ausnahme. Sobald geöffnet, kann jede verfügbare Methode auf dem Handle aufgerufen werden.
"readwrite-unsafe"Mehrere FileSystemSyncAccessHandle Objekte können gleichzeitig auf eine Datei geöffnet werden, vorausgesetzt, sie werden alle im Modus "readwrite-unsafe" geöffnet. Sobald geöffnet, kann jede verfügbare Methode auf den Handles aufgerufen werden.
Ein Promise das in ein FileSystemSyncAccessHandle Objekt aufgelöst wird.
Wird ausgelöst, wenn der PermissionStatus.state für das Handle nicht granted im readwrite Modus ist.
InvalidStateError DOMExceptionWird ausgelöst, wenn das FileSystemSyncAccessHandle Objekt keine Datei im origin private file system darstellt.
NotFoundError DOMExceptionWird ausgelöst, wenn der aktuelle Eintrag nicht gefunden wird.
NoModificationAllowedError DOMExceptionWird ausgelöst, wenn der Browser keine Sperre auf die mit dem Dateihandle verbundene Datei erwerben kann. Dies könnte der Fall sein, weil mode auf readwrite gesetzt ist und versucht wird, mehrere Handles gleichzeitig zu öffnen.
Der folgende asynchrone Ereignis-Handler ist in einem Web Worker enthalten. Der darin enthaltene Code erstellt ein synchrones Dateizugriffshandle.
Unser createSyncAccessHandle() Modus Test Beispiel (sehen Sie sich den Quellcode an) stellt ein <input> Feld bereit, um Text einzugeben, und zwei Tasten — eine, um eingegebenen Text an das Ende einer Datei im origin private file system zu schreiben, und eine, um die Datei zu leeren, wenn sie zu voll wird.
Versuchen Sie, das oben stehende Demo zu erkunden, während die Entwicklertools des Browsers geöffnet sind, damit Sie sehen, was passiert. Wenn Sie versuchen, das Demo in mehreren Browser-Tabs zu öffnen, werden Sie feststellen, dass mehrere Handles gleichzeitig geöffnet werden können, um gleichzeitig in die Datei zu schreiben. Dies liegt daran, dass mode: "readwrite-unsafe" auf den createSyncAccessHandle() Aufrufen gesetzt ist.
Nachfolgend werden wir den Code untersuchen.
Die zwei <button> Elemente und das Text <input> Feld sehen so aus:
Das Haupt-JavaScript im HTML-Dokument ist unten gezeigt. Wir holen Verweise auf die Schreib-Taste, die Datei-Leer-Taste und das Texteingabefeld, dann erstellen wir einen neuen Web Worker mit dem Worker() Konstruktor. Wir definieren dann zwei Funktionen und legen sie als Ereignis-Handler für die Tasten fest:
Das Worker-JavaScript wird unten gezeigt.
Zuerst führen wir eine Funktion namens initOPFS() aus, die eine Referenz auf das OPFS-Root-Verzeichnis mit StorageManager.getDirectory() erhält, eine Datei erstellt und ihr Handle mit FileSystemDirectoryHandle.getFileHandle() zurückgibt, und dann ein FileSystemSyncAccessHandle mit createSyncAccessHandle() zurückgibt. Dieser Aufruf beinhaltet die mode: "readwrite-unsafe" Eigenschaft, die es mehreren Handles erlaubt, gleichzeitig auf die gleiche Datei zuzugreifen.
Innerhalb der message event-Handler-Funktion des Workers erhalten wir zuerst die Größe der Datei mit getSize(). Dann überprüfen wir, ob die mit der Nachricht gesendeten Daten eine command Eigenschaft mit dem Wert "empty" enthalten. Wenn ja, leeren wir die Datei mit truncate() mit einem Wert von 0 und aktualisieren die Dateigröße in der size Variablen.
Wenn die Nachrichtendaten etwas anderes sind, tun wir Folgendes:
| File System # api-filesystemfilehandle-createsyncaccesshandle |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.