Es gibt jetzt eine Möglichkeit, dauerhaften Lese- und Schreibzugriff auf Dateien und Ordner zu erhalten, ohne wiederholt Berechtigungen gewähren zu müssen. In diesem Beitrag wird erklärt, wie das funktioniert. Bevor wir uns den Details widmen, hier eine kurze Zusammenfassung des Status quo und des zu lösenden Problems.
Herausforderungen bei der aktuellen Methode
Mit der File System Access API können Entwickler Lese- und (optional) Schreibzugriff auf Dateien auf der lokalen Festplatte des Nutzers erhalten. Eine beliebte App (unter 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 Bildschirm Willkommen 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 Lesezugriff auf diesen Ordner haben soll.
Nachdem Sie den Zugriff gewährt haben, können Sie sich in der Ordnerhierarchie bewegen und Dateien im Editor von VS Code öffnen. Wenn Sie eine der Dateien ändern, werden Sie vom Browser gefragt, ob Sie dem Ordner Bearbeitungszugriff gewähren möchten.
Wenn Sie dies zulassen, ändert sich das Dateisymbol in der Adressleiste und ein kleiner Abwärtspfeil wird hinzugefügt. Dies bedeutet, dass die App Lese- und Schreibberechtigungen hat. Wenn Sie die Berechtigungen ändern möchten, klicken Sie auf das Symbol und dann auf Zugriff entfernen. Die App kann dann keine Dateien mehr bearbeiten.
Der Zugriff bleibt so lange bestehen, 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 sozusagen dort weitermachen, wo Sie aufgehört haben. Wenn Sie auf Zuletzt geöffnete öffnen klicken, wird in VS Code der zuvor geöffnete Ordner zum erneuten Öffnen angeboten.
Auch wenn Sie dem Ordner bereits Schreibberechtigungen erteilt haben, müssen Sie den Zugriff jetzt noch einmal gewähren. Das wird schnell anstrengend. Bevor wir uns mit der Lösung befassen, also mit dauerhaften Berechtigungen für die File System Access API, stellt sich die Frage, wie VS Code zuletzt verwendete Ordner überhaupt speichern kann.
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 und genau das tut VS Code. Öffnen Sie dazu die Chrome-Entwicklertools, rufen Sie auf dem Tab Anwendung den Bereich IndexedDB auf und wählen Sie die entsprechende Tabelle vscode-filehandles-store
in der vscode-web-db
-Datenbank aus.
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, sodass sie nicht ständig dazu aufgefordert werden müssen.
Das neue Verhalten ist seit Chrome 122 zu beobachten. Wenn Sie die Funktion schon 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: Das neue Verhalten besteht aus einer neuen dreistufigen Berechtigungsanfrage, mit der Nutzer Apps bei jedem Besuch optional Zugriff auf ausgewählte Dateien und Ordner gewähren können.
Dieser neue dreistufige Prompt bietet die folgenden Optionen:
- Dieses Mal zulassen:Die App darf während der aktuellen Sitzung auf Dateien zugreifen. Das entspricht dem bisherigen Verhalten.
- Bei jedem Besuch erlauben:Die App kann unbegrenzt auf die Daten zugreifen, sofern der Zugriff nicht widerrufen wird. Sobald der App dauerhafter Zugriff gewährt wurde, können auch neu geöffnete Dateien und Ordner dauerhaft aufgerufen werden.
- Nicht zulassen:Die App darf nicht auf Dateien zugreifen. (Das entspricht dem bisherigen Verhalten.)
Zweitens: Durch das neue Verhalten wird ein neuer Bereich in den Websiteeinstellungen hinzugefügt, den Nutzer über ein Startsymbol neben dem Schalter Datei bearbeiten aufrufen können.
Wenn Sie auf dieses Symbol klicken, werden die Einstellungen für Datenschutz und Sicherheit für die betreffende App geöffnet. Dort sehen Sie eine Liste mit allen Dateien und Ordnern, auf die die App zugreifen kann. Der Zugriff kann pro Element widerrufen werden, indem Sie auf das Papierkorbsymbol klicken. Wenn Sie den Zugriff pro Element entfernen, kann der App weiterhin Zugriff auf Dateien im Allgemeinen gewährt werden. Wenn der Nutzer den Zugriff generell widerrufen möchte, kann er wie bereits beschrieben auf das Symbol in der Adressleiste klicken.
So lösen Sie das neue Verhalten aus
Für Entwickler gibt es keine Änderungen an der File System Access API. Es gibt drei Möglichkeiten, das neue Verhalten mit dauerhaften Berechtigungen auszulösen. Dabei müssen unterschiedliche Voraussetzungen erfüllt sein:
- Der Nutzer muss einer Datei oder einem Ordner (oder mehreren Dateien oder Ordnern) während des letzten Besuchs eines Ursprungs eine Berechtigung erteilt haben und die App muss die entsprechenden
FileSystemHandle
-Objekte in IndexedDB gespeichert haben. Beim nächsten Besuch der Quelle muss die App eines der gespeichertenFileSystemHandle
-Objekte aus IndexedDB abgerufen und dann die MethodeFileSystemHandle.requestPermission()
aufgerufen haben. Wenn diese Voraussetzungen erfüllt sind, wird die neue Drei-Wege-Aufforderung angezeigt. - Der Ursprung muss die
FileSystemHandle.requestPermission()
-Methode für eineFileSystemHandle
aufgerufen haben, für die der Zugriff zuvor gewährt wurde, der aber automatisch widerrufen wurde, weil der Tab eine Weile im Hintergrund war. Der automatische Widerruf von Berechtigungen funktioniert nach derselben Logik wie im Artikel Einmalige Berechtigungen in Chrome beschrieben. Wenn diese Voraussetzungen erfüllt sind, wird der neue Drei-Wege-Prompt angezeigt. - Der Nutzer muss die App installiert haben. Bei installierten Apps werden die Berechtigungen automatisch beibehalten, sobald der Nutzer den Zugriff gewährt. In diesem Fall wird die Drei-Optionen-Aufforderung nicht angezeigt. Stattdessen wird der App standardmäßig das neue Verhalten zugewiesen.
Im ersten und zweiten Fall werden im Prompt alle FileSystemHandle
-Objekte aufgeführt, auf die die App zuvor Zugriff hatte, nicht nur dasjenige, für das die requestPermission()
-Methode aufgerufen wird. Wie bei einmaligen Berechtigungen wird der Prompt nicht mehr angezeigt, wenn der Nutzer ihn mehr als dreimal ablehnt oder schließt. Stattdessen wird der normale Berechtigungsprompt angezeigt.
Neues Verhalten ausprobieren
Wenn Sie eine unterstützte Version von Chrome verwenden oder die erforderlichen Flags festgelegt haben, können Sie das neue Verhalten in VS Code im Web testen. Öffnen Sie einen Ordner und gewähren Sie Zugriff. Schließen Sie den Tab, öffnen Sie ihn wieder und klicken Sie auf Zuletzt geöffnete öffnen. Hinweis: Das sofortige Neuladen funktioniert nicht, um die Aufforderung auszulösen. Alle Tabs müssen geschlossen sein. Wählen Sie den vorherigen Ordner aus, um den neuen Prompt zu sehen. Einen einfacheren Testfall finden Sie in der Demo zum dauerhaften Zugriff auf das Dateisystem und im Quellcode.
Ergebnisse
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 Stern markiert. Durch die Bereitstellung dieser Funktion für Entwickler und vor allem für Nutzer wird eine wichtige Funktionslücke im Vergleich zu plattformspezifischen Apps geschlossen.
Danksagung
Dieser Beitrag wurde von Christine Hollingsworth, Austin Sullivan und Rachel Andrew geprüft.