Unterstützung der File and Directory Entries API in Firefox
Die ursprüngliche File System API wurde entwickelt, um Browsern die Unterstützung für den Zugriff auf ein sandboxed virtuelles Dateisystem auf dem Speichermedium eines Benutzers zu ermöglichen. Die Standardisierung der Spezifikation wurde 2012 aufgegeben, aber zu diesem Zeitpunkt hatte Google Chrome bereits eine eigene Implementierung der API integriert. Im Laufe der Zeit haben viele beliebte Websites und Webanwendungen begonnen, diese zu nutzen, oft ohne Alternativen zu den Standard-APIs anzubieten oder überhaupt zu überprüfen, ob die API verfügbar ist, bevor sie verwendet wird. Mozilla entschied sich stattdessen, andere APIs zu implementieren, die viele der gleichen Probleme lösen können, wie zum Beispiel IndexedDB; lesen Sie den Blogartikel Why no FileSystem API in Firefox? für weitere Einblicke.
Dies hat dazu geführt, dass eine Reihe beliebter Websites nicht richtig auf anderen Browsern außer Chrome funktionieren. Daher wurde ein Versuch unternommen, eine Spezifikation zu erstellen, die die Funktionen von Googles API bietet, auf die man sich einigen könnte. Das Ergebnis war die File and Directory Entries API. Dieses von Chrome bereitgestellte API-Subset ist noch nicht vollständig spezifiziert; aus Gründen der Web-Kompatibilität wurde jedoch beschlossen, ein Subset der API in Firefox zu implementieren; dieses wurde in Firefox 50 eingeführt.
Dieser Artikel beschreibt, wie sich die Firefox-Implementierung der File and Directory Entries API von anderen Implementierungen und/oder der Spezifikation unterscheidet.
Abweichungen von der Spezifikation in Chrome
Das größte verbleibende Kompatibilitätsproblem ist, dass Chrome immer noch ältere Namen für viele der Schnittstellen in der API verwendet, da sie eine verwandte, aber unterschiedliche Spezifikation implementiert haben:
Name in der Spezifikation | Name in Google Chrome |
---|---|
FileSystemDirectoryEntry |
DirectoryEntry |
FileSystemDirectoryEntrySync |
DirectoryEntrySync |
FileSystemDirectoryReader |
DirectoryReader |
FileSystemDirectoryReaderSync |
DirectoryReaderSync |
FileSystemEntry |
Entry |
FileSystemEntrySync |
EntrySync |
FileSystemFileEntry |
FileEntry |
FileSystemFileEntrySync |
FileEntrySync |
Stellen Sie sicher, dass Sie dies in Ihrem Code berücksichtigen, indem Sie beide Namen zulassen. Hoffentlich wird Chrome bald aktualisiert, um die neueren Namen zu verwenden!
Um sicherzustellen, dass Ihr Code sowohl in Chrome als auch in anderen Browsern funktioniert, können Sie Code ähnlich dem folgenden einschließen:
const FileSystemDirectoryEntry =
window.FileSystemDirectoryEntry || window.DirectoryEntry;
const FileSystemEntry = window.FileSystemEntry || window.Entry;
Einschränkungen in Firefox
Als nächstes betrachten wir die Einschränkungen der Firefox-Implementierung der API. Grob gesagt lassen sich diese Einschränkungen wie folgt zusammenfassen:
-
Inhaltsskripte können keine Dateisysteme erstellen oder den Zugriff auf ein Dateisystem initiieren. Derzeit gibt es nur zwei Möglichkeiten, auf Dateisystemeinträge zuzugreifen:
- Das
<input>
-Element, unter Verwendung derHTMLInputElement.webkitEntries
-Eigenschaft, um auf ein Array vonFileSystemEntry
-Objekten zuzugreifen, die die Dateisystemeinträge beschreiben, die Sie dann lesen können. - Drag-and-Drop, indem die
DataTransferItem.webkitGetAsEntry
-Methode aufgerufen wird, mit der Sie einFileSystemFileEntry
oderFileSystemDirectoryEntry
für Dateien erhalten können, die auf eine Drop-Zone gezogen wurden.
- Das
-
Firefox unterstützt das
"filesystem:"
URL-Schema nicht.
Siehe auch
- File and Directory Entries API
- Einführung in die File and Directory Entries API
- File and Directory Entries API Spezifikation
- Ursprüngliche Spezifikation für die File API: Directories and System (oft als "FileSystem API" bezeichnet); Google Chrome war der einzige Browser, der diese aufgegebene API implementierte.