Es gibt jetzt eine Möglichkeit, dauerhaften Lese- und Schreibzugriff auf Dateien und Ordner zu erhalten, ohne Berechtigungen wiederholt erteilen zu müssen. In diesem Beitrag wird die Funktionsweise erläutert. Bevor wir uns die Details ansehen, hier eine kurze Zusammenfassung des Status quo und des Problems, das gelöst werden soll.
Herausforderungen bei der aktuellen Methode
Mit der File System Access API können Entwickler auf Dateien auf der lokalen Festplatte des Nutzers zugreifen, um sie zu lesen und (optional) zu schreiben. Eine beliebte App (neben vielen anderen), die diese API nutzt, ist Visual Studio Code (VS Code), die IDE von Microsoft, die direkt im Browser ausgeführt wird. Wenn Sie VS Code öffnen, wird der Willkommen-Bildschirm angezeigt. Dort können Sie eine neue Datei erstellen oder eine vorhandene Datei oder einen Ordner öffnen.
Wenn Sie auf Ordner öffnen klicken und einen der Ordner auf Ihrer Festplatte auswählen, werden Sie im Browser gefragt, ob VS Code view-Zugriff auf diesen Ordner haben soll.
Sobald Sie den Zugriff gewährt haben, können Sie in der Ordnerhierarchie navigieren und Dateien im Editor von VS Code öffnen. Wenn Sie eine der Dateien ändern, werden Sie im Browser gefragt, ob Sie Bearbeitungszugriff auf den Ordner gewähren möchten.
Wenn Sie dies zulassen, ändert sich das Dateisymbol in der Adressleiste und es wird ein kleiner Abwärtspfeil hinzugefügt, der angibt, dass die App Lese- und Schreibberechtigungen hat. Wenn Sie die Berechtigungen ändern möchten, klicken Sie auf das Symbol und dann auf Zugriff entfernen, damit die App keine Dateien mehr bearbeiten kann.
Der Zugriff besteht, bis Sie den letzten Tab des Ursprungs schließen. Wenn Sie die App dann schließen und wieder öffnen, können Sie in VS Code in gewisser Weise dort weitermachen, wo Sie aufgehört haben. Wenn Sie auf Zuletzt geöffnet klicken, bietet VS Code den zuvor geöffneten Ordner zum erneuten Öffnen an.
Auch wenn Sie zuvor Schreibberechtigungen für den Ordner erteilt haben, müssen Sie den Zugriff jetzt noch einmal gewähren. Das wird schnell anstrengend. Bevor wir uns mit der Lösung, also persistenten Berechtigungen für die File System Access API, befassen, wollen wir uns ansehen, wie VS Code sich überhaupt an zuletzt verwendete Ordner erinnert.
In der File System Access API wird der Zugriff auf Dateien und Ordner über FileSystemHandle
-Objekte verwaltet: FileSystemFileHandle
-Objekte für Dateien und FileSystemDirectoryHandle
-Objekte für Ordner (Verzeichnisse). Beide können in IndexedDB gespeichert werden. Genau das macht VS Code. Sie können dies sehen, indem Sie die Chrome-Entwicklertools öffnen, auf dem Tab Anwendung zum Bereich „IndexedDB“ navigieren und die entsprechende Tabelle vscode-filehandles-store
in der Datenbank vscode-web-db
auswählen.
Die neue Methode: Was ändert sich und wann?
In Chrome wird ein neues Verhalten eingeführt, mit dem Nutzer optional dauerhaften Zugriff auf ihre Dateien und Ordner gewähren können. Dadurch muss der Nutzer nicht ständig neu aufgefordert werden.
Das neue Verhalten ist ab Chrome 122 zu beobachten. Wenn Sie die Funktion früher testen möchten, können Sie ab Chrome 120 die beiden Flags chrome://flags/#file-system-access-persistent-permission
und chrome://flags/#one-time-permission
auf Aktiviert setzen.
Erstens besteht das neue Verhalten aus einer neuen dreiteiligen Berechtigungsaufforderung, über die Nutzer Apps optional bei jedem Besuch Zugriff auf ausgewählte Dateien und Ordner gewähren können.
Dieser neue dreiteilige Prompt bietet die folgenden Optionen:
- Für diese Zeit erlauben:Die App darf für die aktuelle Sitzung auf Dateien zugreifen. Das entspricht dem bisherigen Verhalten.
- Bei jedem Besuch erlauben:Die App hat unbegrenzten Zugriff, sofern der Zugriff nicht widerrufen wird. Sobald der App der dauerhafte Zugriff gewährt wurde, sind auch neu geöffnete Dateien und Ordner dauerhaft zugänglich.
- Nicht zulassen:Die App hat keinen Zugriff auf Dateien. (Das entspricht dem bisherigen Verhalten.)
Zweitens gibt es aufgrund des neuen Verhaltens einen neuen Bereich in den Websiteeinstellungen, auf den Nutzer über ein Startsymbol neben dem Schalter Dateibearbeitung zugreifen können.
Wenn Nutzer auf dieses Startsymbol klicken, werden die Datenschutz und Sicherheit-Einstellungen für die entsprechende App geöffnet. Dort sehen sie eine Liste mit allen Dateien und Ordnern, auf die die App Zugriff hat. Der Zugriff kann pro Element widerrufen werden, indem Sie auf das Papierkorbsymbol klicken. Wenn Sie den Zugriff pro Element entfernen, kann der App weiterhin der allgemeine Zugriff auf Dateien gewährt werden. Um den Zugriff allgemein zu widerrufen, kann der Nutzer wie oben beschrieben auf das Symbol in der Adressleiste klicken.
So lösen Sie das neue Verhalten aus
Für Entwickler ändert sich nichts an der File System Access API. Es gibt drei Möglichkeiten, das neue Verhalten mit dauerhaften Berechtigungen auszulösen. Dabei müssen jeweils unterschiedliche Voraussetzungen erfüllt sein:
- Der Nutzer muss bei seinem letzten Besuch einer Quelle die Berechtigung für eine Datei oder einen Ordner (oder mehrere Dateien oder Ordner) erteilt haben und die App muss die entsprechenden
FileSystemHandle
-Objekte in IndexedDB gespeichert haben. Beim nächsten Besuch des Ursprungs muss die App eines der gespeichertenFileSystemHandle
-Objekte aus IndexedDB abgerufen und dann die MethodeFileSystemHandle.requestPermission()
aufgerufen haben. Wenn diese Voraussetzungen erfüllt sind, wird der neue Prompt mit drei Optionen angezeigt. - Der Ursprung muss die Methode
FileSystemHandle.requestPermission()
für einFileSystemHandle
aufgerufen haben, für das zuvor Zugriff gewährt wurde, dessen Zugriff jedoch automatisch widerrufen wurde, da der Tab eine Weile im Hintergrund war. (Der automatische Berechtigungsentzug funktioniert nach derselben Logik wie im Artikel Einmalberechtigungen in Chrome beschrieben.) Wenn diese Voraussetzungen erfüllt sind, wird der neue Prompt mit drei Optionen angezeigt. - Der Nutzer muss die App installiert haben. Bei installierten Apps bleiben Berechtigungen automatisch erhalten, sobald der Nutzer den Zugriff gewährt. In diesem Fall wird die dreifache Aufforderung nicht angezeigt, stattdessen erhält die App standardmäßig das neue Verhalten.
Im ersten und zweiten Fall werden im Prompt alle FileSystemHandle
-Objekte aufgeführt, auf die die App zuvor Zugriff hatte, nicht nur das, für das die requestPermission()
-Methode aufgerufen wird. Wie bei Einmalberechtigungen wird die Aufforderung nicht mehr ausgelöst, wenn der Nutzer sie mehr als dreimal ablehnt oder schließt. Stattdessen wird die reguläre Berechtigungsaufforderung angezeigt.
Neues Verhalten ausprobieren
Wenn Sie eine unterstützte Version von Chrome haben oder die erforderlichen Flags festgelegt sind, können Sie das neue Verhalten in VS Code im Web testen. Öffnen Sie einen Ordner und gewähren Sie Zugriff. Schließen Sie dann den Tab, öffnen Sie ihn wieder und klicken Sie auf Zuletzt geöffnet. Hinweis: Ein sofortiges Neuladen löst die Aufforderung nicht aus. Alle Tabs müssen geschlossen werden. Wählen Sie den vorherigen Ordner aus. Der neue Prompt wird angezeigt. Ein noch reduzierterer Testlauf ist die Demo für den persistenten Dateisystemzugriff, deren Quellcode Sie sich ansehen können.
Zusammenfassung
Dauerhafte Berechtigungen für die File System Access API sind eine der am häufigsten angeforderten Funktionen der API. Auch der Implementierungsfehler ist sehr beliebt und wurde von vielen Entwicklern mit einem Sternchen versehen. Durch die Bereitstellung dieser Funktion für Entwickler und vor allem für Nutzer wird eine wichtige Lücke im Vergleich zu plattformspezifischen Apps geschlossen.
Danksagung
Dieser Beitrag wurde von Christine Hollingsworth, Austin Sullivan und Rachel Andrew geprüft.