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:

js
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:

  • Firefox unterstützt das "filesystem:" URL-Schema nicht.

Siehe auch