Ora esiste un modo per ottenere l'accesso in lettura e scrittura permanente a file e cartelle senza dover concedere le autorizzazioni ripetutamente. Questo post spiega come funziona. Prima di entrare nei dettagli, ecco un breve riepilogo dello status quo e del problema che stiamo cercando di risolvere.
Problemi con il metodo attuale
L'API File System Access consente agli sviluppatori di accedere ai file sul disco rigido locale dell'utente in modalità di lettura e (facoltativamente) scrittura. Un'app popolare (tra molte altre) che utilizza questa API è Visual Studio Code (VS Code), l'IDE di Microsoft che viene eseguito direttamente nel browser. Quando apri VS Code, viene visualizzata la schermata Ti diamo il benvenuto in cui puoi creare un nuovo file o aprire un file o una cartella esistente.
Se fai clic su Apri cartella e scegli una delle cartelle sul tuo disco rigido, il browser ti chiederà se vuoi che VS Code abbia accesso in visualizzazione a questa cartella.
Una volta concesso l'accesso, puoi navigare nella gerarchia delle cartelle e aprire i file nell'editor di VS Code. Se apporti una modifica a uno dei file, il browser ti chiederà se vuoi concedere l'accesso in modifica alla cartella.
Se lo consenti, l'icona del file nella barra degli indirizzi cambia e viene aggiunta una piccola freccia rivolta verso il basso, che indica che l'app dispone delle autorizzazioni di lettura e scrittura. Per modificare le autorizzazioni, fai clic sull'icona e poi su Rimuovi accesso, in modo che l'app non possa più modificare i file.
L'accesso dura fino alla chiusura dell'ultima scheda dell'origine. Se chiudi l'app e la riapri, VS Code in un certo senso ti consente di continuare da dove avevi interrotto. Quando fai clic su Apri recenti, VS Code offre la possibilità di riaprire la cartella aperta in precedenza.
Tuttavia, anche se hai già concesso l'autorizzazione di scrittura alla cartella, ora devi concedere nuovamente l'accesso. Questo diventa molto stancante molto rapidamente. Prima di esaminare la soluzione, ovvero le autorizzazioni permanenti per l'API File System Access, come fa VS Code a ricordare le cartelle recenti?
Nell'API File System Access, l'accesso a file e cartelle è gestito tramite
FileSystemHandle
oggetti:
FileSystemFileHandle
oggetti per i file e
FileSystemDirectoryHandle
oggetti per le cartelle (directory). Entrambi possono essere
memorizzati in IndexedDB,
ed è esattamente ciò che fa VS Code. Per visualizzare questa informazione, apri Chrome DevTools, vai alla sezione IndexedDB nella scheda Applicazione e seleziona la tabella pertinente vscode-filehandles-store
nel database vscode-web-db
.
Il nuovo metodo: cosa cambia e quando
Chrome sta lanciando un nuovo comportamento che consente agli utenti, se lo desiderano, di concedere l'accesso permanente ai propri file e alle proprie cartelle, evitando la necessità di richiedere costantemente all'utente di confermare.
Il nuovo comportamento può essere osservato a partire da Chrome 122. Per provarlo prima, a partire da Chrome 120, imposta i due flag chrome://flags/#file-system-access-persistent-permission
e chrome://flags/#one-time-permission
su Attivato.
Innanzitutto, il nuovo comportamento consiste in una nuova richiesta di autorizzazione a tre vie che consente agli utenti di concedere alle app l'accesso a file e cartelle selezionati a ogni visita.
Questo nuovo prompt a tre vie offre le seguenti opzioni:
- Consenti questa volta:consente all'app di accedere ai file per la sessione corrente. Questo corrisponde al comportamento esistente.
- Consenti a ogni visita:consente all'app di avere accesso a tempo indeterminato, a meno che l'accesso non venga revocato. Una volta concesso l'accesso permanente all'app, anche i file e le cartelle appena aperti saranno accessibili in modo permanente.
- Non consentire:non consente all'app di accedere ai file. (Questo corrisponde al comportamento esistente).
In secondo luogo, il nuovo comportamento prevede una nuova sezione nelle impostazioni del sito, che gli utenti possono raggiungere tramite un'icona di avvio accanto all'opzione di attivazione/disattivazione Modifica file.
Se fai clic su questa icona di avvio, vengono aperte le impostazioni Privacy e sicurezza per l'app in questione, dove l'utente vede un elenco di elementi per tutti i file e le cartelle a cui l'app ha accesso. L'accesso può essere revocato per singolo elemento facendo clic sull'icona del cestino. Se rimuovi l'accesso per elemento, all'app può essere comunque concesso l'accesso ai file in generale. Per revocare l'accesso in generale, l'utente può fare clic sull'icona nella barra degli indirizzi, come descritto in precedenza.
Come attivare il nuovo comportamento
L'API File System Access non prevede modifiche rivolte agli sviluppatori. Per attivare il nuovo comportamento con le autorizzazioni permanenti, esistono tre modi con diversi prerequisiti da soddisfare:
- L'utente deve aver concesso l'autorizzazione a un file o a una cartella (o a più file o cartelle) durante l'ultima visita a un'origine e l'app deve aver memorizzato gli oggetti
FileSystemHandle
corrispondenti in IndexedDB. Alla successiva visita all'origine, l'app deve aver recuperato uno degli oggettiFileSystemHandle
memorizzati da IndexedDB e poi aver chiamato il relativo metodoFileSystemHandle.requestPermission()
. Se questi prerequisiti sono soddisfatti, viene visualizzato il nuovo prompt a tre vie. - L'origine deve aver chiamato il metodo
FileSystemHandle.requestPermission()
su unFileSystemHandle
a cui è stato concesso l'accesso in precedenza, ma il cui accesso è stato revocato automaticamente perché la scheda è stata in background per un po' di tempo. La revoca automatica delle autorizzazioni funziona in base alla stessa logica descritta nell'articolo Autorizzazioni una tantum in Chrome. Se questi prerequisiti sono soddisfatti, viene visualizzato il nuovo prompt a tre vie. - L'utente deve aver installato l'app. Le app installate manterranno automaticamente le autorizzazioni una volta che l'utente avrà concesso l'accesso. In questo caso, la richiesta con tre opzioni non verrà visualizzata, ma l'app acquisirà il nuovo comportamento per impostazione predefinita.
Nel primo e nel secondo caso, la richiesta elenca tutti gli oggetti FileSystemHandle
a cui l'app aveva precedentemente accesso, non solo quello per cui viene chiamato il metodo
requestPermission()
. In linea con il funzionamento delle autorizzazioni una tantum, se l'utente nega o ignora la richiesta più di tre volte, questa non verrà più attivata e verrà visualizzata la richiesta di autorizzazione standard.
Provare il nuovo comportamento
Se hai una versione supportata di Chrome o hai impostato i flag richiesti, puoi testare il nuovo comportamento in VS Code sul web. Apri una cartella e concedi l'accesso, quindi chiudi la scheda e riaprila e fai clic su Apri recente (tieni presente che il ricaricamento immediato non funziona per attivare la richiesta, tutte le schede devono essere chiuse). Scegli la cartella precedente e verrà visualizzata la nuova richiesta. Per un caso di test più ridotto, dai un'occhiata alla demo di accesso al sistema file permanente e controlla il codice sorgente.
Conclusioni
Le autorizzazioni permanenti per l'API Accesso al file system sono una delle funzionalità più richieste dell'API e anche il bug di implementazione è molto popolare, con molti sviluppatori che lo hanno contrassegnato come preferito. Mettendo questa funzionalità a disposizione degli sviluppatori e, soprattutto, degli utenti, è stato colmato un importante divario rispetto alle app specifiche per piattaforma.
Riconoscimenti
Questo post è stato esaminato da Christine Hollingsworth, Austin Sullivan e Rachel Andrew.