Er is nu een manier om permanente lees- en schrijftoegang tot bestanden en mappen te krijgen zonder herhaaldelijk machtigingen te hoeven verlenen. Dit bericht legt uit hoe het werkt. Voordat we in de details duiken, eerst een korte samenvatting van de status quo en het probleem dat wordt opgelost.
Uitdagingen met de huidige methode
Met de File System Access API kunnen ontwikkelaars bestanden op de lokale harde schijf van de gebruiker lezen en (optioneel) schrijven. Een populaire app (naast vele andere ) die gebruikmaakt van deze API is Visual Studio Code (VS Code), de IDE van Microsoft die rechtstreeks in de browser draait. Wanneer u VS Code opent, wordt u begroet met een welkomstscherm waar u een nieuw bestand kunt maken, of een bestaand bestand of een map kunt openen.
Als u op Map openen klikt en een van de mappen op uw harde schijf selecteert, vraagt de browser of u VS Code leesrechten wilt geven voor deze map.
Zodra u toegang verleent, kunt u door de mappenstructuur navigeren en bestanden openen in de editor van VS Code. Als u een wijziging aanbrengt in een van de bestanden, vraagt de browser of u bewerkingsrechten voor de map wilt verlenen.
Als u dit toestaat, verandert het bestandspictogram in de adresbalk en wordt er een pijltje naar beneden toegevoegd, wat aangeeft dat de app lees- en schrijfrechten heeft. Om de rechten te wijzigen, klikt u op het pictogram en vervolgens op Toegang verwijderen , zodat de app geen bestanden meer kan bewerken.
De toegang blijft actief totdat u het laatste tabblad van de bron sluit. Als u de app vervolgens sluit en opnieuw opent, kunt u met VS Code doorgaan waar u gebleven was. Wanneer u op 'Open recente bestanden' klikt, biedt VS Code de eerder geopende map aan om opnieuw te openen.
Maar zelfs als je eerder schrijfrechten voor de map hebt verleend, moet je die nu opnieuw verlenen. Dit wordt al snel vermoeiend. Voordat we ingaan op de oplossing, namelijk permanente rechten voor de File System Access API, hoe kan VS Code überhaupt recente mappen onthouden?
In de File System Access API wordt de toegang tot bestanden en mappen beheerd via FileSystemHandle
objecten: FileSystemFileHandle
objecten voor bestanden en FileSystemDirectoryHandle
objecten voor mappen. Beide kunnen worden opgeslagen in IndexedDB , en dat is precies wat VS Code doet. U kunt dit zien door Chrome DevTools te openen, op het tabblad Toepassing naar de sectie IndexedDB te gaan en de relevante tabel vscode-filehandles-store
in de database vscode-web-db
te selecteren.
De nieuwe manier: wat verandert er en wanneer?
Chrome lanceert een nieuw gedrag waarmee gebruikers optioneel permanente toegang tot hun bestanden en mappen kunnen verlenen, zodat ze de gebruiker niet steeds opnieuw hoeven te vragen. Het nieuwe gedrag is al te zien vanaf Chrome 122. Om het eerder te testen, kunt u vanaf Chrome 120 de twee vlaggen chrome://flags/#file-system-access-persistent-permission
en chrome://flags/#one-time-permission
op 'Ingeschakeld' zetten.
Ten eerste bestaat het nieuwe gedrag uit een nieuwe drieweg-toestemmingsprompt waarmee gebruikers optioneel apps toegang kunnen verlenen tot geselecteerde bestanden en mappen bij elk bezoek.
Deze nieuwe driewegprompt heeft de volgende opties:
- Deze tijd toestaan: Hiermee geeft u de app toegang tot bestanden voor de huidige sessie. (Dit komt overeen met het bestaande gedrag.)
- Toestaan bij elk bezoek: Hiermee geeft u de app onbeperkte toegang, tenzij deze wordt ingetrokken. Zodra de app permanente toegang heeft gekregen, zijn nieuw geopende bestanden en mappen ook permanent toegankelijk.
- Niet toestaan: De app heeft geen toegang tot bestanden. (Dit komt overeen met het bestaande gedrag.)
Ten tweede omvat het nieuwe gedrag een nieuwe sectie in de site-instellingen, die gebruikers kunnen bereiken via een starticoon naast de schakelaar Bestand bewerken.
Wanneer u op dit startpictogram klikt, worden de privacy- en beveiligingsinstellingen voor de betreffende app geopend. De gebruiker ziet dan een lijst met items voor alle bestanden en mappen waartoe de app toegang heeft. De toegang kan per item worden ingetrokken door op het prullenbakpictogram te klikken. Door de toegang per item in te trekken, kan de app in het algemeen nog steeds toegang tot bestanden krijgen. Om de toegang in het algemeen in te trekken, klikt u op het pictogram in de adresbalk, zoals eerder beschreven.
Hoe je het nieuwe gedrag kunt triggeren
Er zijn geen wijzigingen voor ontwikkelaars in de File System Access API. Om het nieuwe gedrag met permanente machtigingen te activeren, zijn er drie manieren, met verschillende voorwaarden waaraan moet worden voldaan:
- De gebruiker moet tijdens het laatste bezoek aan een bron toestemming hebben gegeven voor een bestand of map (of meerdere bestanden of mappen) en de app moet de bijbehorende
FileSystemHandle
objecten in IndexedDB hebben opgeslagen. Bij het volgende bezoek aan de bron moet de app een van de opgeslagenFileSystemHandle
objecten uit IndexedDB hebben opgehaald en vervolgens de methodeFileSystemHandle.requestPermission()
hebben aangeroepen. Als aan deze voorwaarden is voldaan, wordt de nieuwe driewegprompt weergegeven. - De oorsprong moet de
FileSystemHandle.requestPermission()
-methode hebben aangeroepen op eenFileSystemHandle
waartoe eerder toegang was verleend, maar waarvan de toegang automatisch is ingetrokken omdat het tabblad een tijdje op de achtergrond was. (Het automatisch intrekken van machtigingen werkt op basis van dezelfde logica als beschreven in het artikel Eenmalige machtigingen in Chrome .) Als aan deze voorwaarden is voldaan, wordt de nieuwe driewegprompt weergegeven. - De gebruiker moet de app hebben geïnstalleerd. Geïnstalleerde apps behouden automatisch hun rechten zodra de gebruiker toegang verleent. In dit geval wordt de driewegprompt niet weergegeven, maar krijgt de app standaard het nieuwe gedrag.
In het eerste en tweede geval geeft de prompt alle FileSystemHandle
objecten weer waartoe de app eerder toegang had, niet alleen het object waarvoor de requestPermission()
methode wordt aangeroepen. In lijn met de manier waarop het werkt met eenmalige machtigingen , wordt de prompt niet meer geactiveerd als de gebruiker deze meer dan drie keer weigert of negeert. In plaats daarvan wordt de normale machtigingsprompt weergegeven.
Probeer het nieuwe gedrag
Als je een ondersteunende versie van Chrome hebt of de vereiste vlaggen hebt ingesteld, kun je het nieuwe gedrag in VS Code online testen. Open een map en verleen toegang. Sluit vervolgens het tabblad, open het opnieuw en klik op 'Open recente' (houd er rekening mee dat direct opnieuw laden niet werkt om de prompt te activeren; alle tabbladen moeten gesloten zijn). Kies de vorige map en de nieuwe prompt wordt weergegeven. Voor een meer beperkte testcase kun je de demo van Persistent File System Access bekijken en de broncode ervan bekijken .
Conclusies
Persistente rechten voor de File System Access API is een van de meest gevraagde features van de API en de implementatiebug is ook zeer populair, met veel ontwikkelaars die er de aandacht op vestigen. Door deze feature beschikbaar te maken voor ontwikkelaars, en vooral voor gebruikers, wordt een belangrijke lacune ten opzichte van platformspecifieke apps gedicht.
Dankbetuigingen
Deze post werd beoordeeld door Christine Hollingsworth , Austin Sullivan en Rachel Andrew .