Registra un'app come gestore di file nel sistema operativo.
Ora che le app web sono in grado di leggere e scrivere file, la logica successiva
è consentire agli sviluppatori di dichiarare queste stesse app web come gestori di file per i file che le loro app possono
creare ed elaborare. L'API File handling consente di fare esattamente questo. Dopo la registrazione di un SMS
come gestore di file e, dopo averla installata, puoi fare clic con il tasto destro del mouse su un file .txt
in macOS e
seleziona "Ottieni informazioni" per indicare al sistema operativo che deve sempre aprire i file .txt
con questa app come
predefinito.
Casi d'uso suggeriti per l'API File handling
Ecco alcuni esempi di siti che possono utilizzare questa API:
- Applicazioni per Office come editor di testo, app per fogli di lavoro e creatori di presentazioni.
- Editor di grafica e strumenti di disegno.
- Strumenti di editing a livello di videogiochi.
Come utilizzare l'API File handling
Miglioramento progressivo
L'API File handling in sé non può essere riempita singolarmente. La funzionalità di apertura di file con un di Google Cloud, tuttavia, possono essere realizzati in altri due modi:
- L'API Web Share Target consente agli sviluppatori di specificare la propria app come target della condivisione in modo che i file possano essere aperti dal foglio di condivisione del sistema operativo.
- L'API File System Access può essere integrata con il trascinamento dei file, quindi gli sviluppatori possono gestire i file persi nell'app già aperta.
Supporto browser
Rilevamento delle caratteristiche
Per verificare se l'API File handling è supportata, utilizza:
if ('launchQueue' in window && 'files' in LaunchParams.prototype) {
// The File Handling API is supported.
}
La parte dichiarativa dell'API File handling
Come primo passaggio, le app web devono descrivere in modo dichiarativo nel file manifest dell'app web
il tipo di file che possono gestire. L'API File handling estende il manifest dell'app web con una nuova
denominata "file_handlers"
, che accetta un array di gestori di file. Un gestore di file
un oggetto con le seguenti proprietà:
- Una proprietà
"action"
che punta a un URL nell'ambito dell'app come suo valore. - Una proprietà
"accept"
con un oggetto di tipi MIME come chiavi ed elenchi di estensioni di file come loro e i relativi valori. - Una proprietà
"icons"
con un array diImageResource
. Alcuni sistemi operativi consentono a un'associazione di tipo di file di visualizzare un'icona che non sia solo l'icona dell'applicazione associata, ma piuttosto un'icona speciale relativa all'utilizzo di quel tipo di file con l'applicazione. - Una proprietà
"launch_type"
che definisce se più file devono essere aperti in una singola o in più client. Il valore predefinito è"single-client"
. Se l'utente apre più file e se il gestore di file è stato annotato con"multiple-clients"
come il suo"launch_type"
, avverrà più di un avvio dell'app e, per ogni avvio, ArrayLaunchParams.files
(vedi più avanti) avrà un solo elemento.
L'esempio riportato di seguito, che mostra solo l'estratto pertinente del file manifest dell'app web, dovrebbe renderlo più chiaro:
{
"file_handlers": [
{
"action": "/open-csv",
"accept": {
"text/csv": [".csv"]
},
"icons": [
{
"src": "csv-icon.png",
"sizes": "256x256",
"type": "image/png"
}
],
"launch_type": "single-client"
},
{
"action": "/open-svg",
"accept": {
"image/svg+xml": ".svg"
},
"icons": [
{
"src": "svg-icon.png",
"sizes": "256x256",
"type": "image/png"
}
],
"launch_type": "single-client"
},
{
"action": "/open-graf",
"accept": {
"application/vnd.grafr.graph": [".grafr", ".graf"],
"application/vnd.alternative-graph-app.graph": ".graph"
},
"icons": [
{
"src": "graf-icon.png",
"sizes": "256x256",
"type": "image/png"
}
],
"launch_type": "multiple-clients"
}
]
}
Questo è per un'applicazione ipotetica che gestisce i file con valori separati da virgole (.csv
) in
/open-csv
, file di grafica vettoriale scalabile (.svg
) in /open-svg
e un formato file Grafr inventato
con uno qualsiasi tra .grafr
, .graf
o .graph
come estensione di /open-graf
. I primi due si apriranno
in un solo client, l'ultimo in più client se vengono gestiti più file.
La parte imperativa dell'API File handling
Ora che l'app ha dichiarato quali file può gestire e in quale URL teoricamente può gestire, l'app deve
fare pratica con i file in arrivo. Ecco dove entra in gioco launchQueue
in gioco. Per accedere ai file avviati, un sito deve specificare un consumer per window.launchQueue
. Gli avvii vengono messi in coda finché non vengono gestiti dal consumer specificato, che viene richiamato
esattamente una volta per ogni lancio. In questo modo, viene gestito ogni lancio, indipendentemente da quando
è stato specificato.
if ('launchQueue' in window && 'files' in LaunchParams.prototype) {
launchQueue.setConsumer((launchParams) => {
// Nothing to do when the queue is empty.
if (!launchParams.files.length) {
return;
}
for (const fileHandle of launchParams.files) {
// Handle the file.
}
});
}
Assistenza per DevTools
Al momento della stesura del presente documento non c'è assistenza per DevTools, ma ho inviato una richiesta richiesta di funzionalità per richiedere assistenza aggiunto.
Demo
Ho aggiunto il supporto per la gestione di file a Excalidraw, un'app di disegno in stile cartoni animati. Per testarlo, devi prima installare Excalidraw. Quando in seguito crei un file con questo file e lo archivi da qualche parte tuo file system, puoi aprirlo con un doppio clic o facendo clic con il tasto destro del mouse e selezionare "Ecalidraw" nel menu contestuale. Puoi consultare l'implementazione nel codice sorgente. le API nel tuo codice.
.Sicurezza
Il team di Chrome ha progettato e implementato l'API File handling secondo i principi fondamentali definiti in Controllo dell'accesso a potenti funzionalità della piattaforma web, tra cui controllo utente, trasparenza ed ergonomia.
Aggiornamenti di autorizzazioni, persistenza delle autorizzazioni e gestori di file
Per garantire la fiducia degli utenti e la sicurezza degli utenti di file, quando l'API File handling apre un file, verrà mostrato un prompt di autorizzazione prima che una PWA possa visualizzare un file. Verrà mostrata questa richiesta di autorizzazione subito dopo che l'utente ha selezionato la PWA per aprire un file, in modo che l'autorizzazione sia strettamente associata l'azione di aprire un file usando la PWA, rendendolo più comprensibile e pertinente.
Questa autorizzazione verrà visualizzata ogni volta finché l'utente non farà clic su Consenti o Blocca la gestione dei file. per il sito o ignora tre volte la richiesta (dopodiché Chromium bloccherà l'embargo autorizzazione). L'impostazione selezionata verrà mantenuta durante la chiusura e la riapertura della PWA.
Quando vengono rilevate le modifiche e l'aggiornamento del file manifest nella sezione "file_handlers"
, le autorizzazioni
verrà reimpostato.
Sfide relative ai file
Esiste una grande categoria di vettori di attacco che si aprono consentendo ai siti web di accedere ai file. Questi sono descritti in articolo sull'API File System Access. La funzionalità aggiuntiva per la sicurezza che l'API File handling fornisce sul file system L'API Access è la possibilità di concedere l'accesso a determinati file tramite la tecnologia integrata UI, anziché tramite un selettore file mostrato da un'applicazione web.
Esiste comunque il rischio che gli utenti concedano involontariamente a un'applicazione web l'accesso a un file tramite aprendolo. Tuttavia, è in genere compreso che l'apertura di un file consente all'applicazione aperto con per leggere e/o manipolare tale file. Pertanto, la scelta esplicita di un utente di aprire un file in un'applicazione installata, ad esempio tramite un pulsante "Apri con..." menu contestuale, può essere letto come una un indicatore di attendibilità nell'applicazione.
Verifiche predefinite per i gestori
L'eccezione a questa regola si verifica quando non ci sono applicazioni sul sistema host per un determinato tipo di file. Nella questo caso, alcuni sistemi operativi host possono promuovere automaticamente il gestore appena registrato nella gestore predefinito per quel tipo di file in modo invisibile e senza alcun intervento da parte dell'utente. Questo potrebbe significa che se l'utente fa doppio clic su un file di quel tipo, questo si aprirà automaticamente nei nell'app web di Google. Su questi sistemi operativi host, quando lo user agent stabilisce che non sono gestore predefinito per il tipo di file, potrebbe essere necessaria una richiesta di autorizzazione esplicita per evitare invio accidentale dei contenuti di un file a un'applicazione web senza il consenso dell'utente.
Controllo utenti
La specifica indica che i browser non devono registrare tutti i siti in grado di gestire i file come file
. Al contrario, la registrazione per la gestione dei file deve essere protetta dopo l'installazione e non deve mai verificarsi.
senza una conferma esplicita da parte dell'utente, soprattutto se un sito deve diventare il gestore predefinito. Piuttosto
rispetto alla compromissione di estensioni esistenti come .json
che probabilmente l'utente ha già un gestore predefinito
registrati, i siti dovrebbero prendere in considerazione la creazione di estensioni personalizzate.
Trasparenza
Tutti i sistemi operativi consentono agli utenti di modificare le attuali associazioni di file. Non rientra nell'ambito del browser.
Feedback
Il team di Chrome vuole saperne di più sulla tua esperienza con l'API File handling.
Parlaci della progettazione dell'API
C'è qualcosa nell'API che non funziona come previsto? Oppure mancano metodi o le proprietà necessarie per implementare la tua idea? Hai una domanda o un commento sulla sicurezza modello?
- Segnala un problema relativo alle specifiche sul repository GitHub corrispondente o aggiungi le tue opinioni a un problema.
Segnalare un problema con l'implementazione
Hai trovato un bug nell'implementazione di Chrome? Oppure l'implementazione è diversa dalle specifiche?
- Segnala un bug all'indirizzo new.crbug.com. Assicurati di includere il maggior numero di dettagli possibile
puoi, semplici istruzioni per la riproduzione e inserisci
UI>Browser>WebAppInstalls>FileHandling
nella casella Componenti. Glitch è perfetto per condividere contenuti in modo facile e veloce. riproduzioni.
Mostra il supporto per l'API
Intendi utilizzare l'API File handling? Il tuo supporto pubblico aiuta il team di Chrome a dare la priorità alle funzionalità e indica agli altri fornitori di browser quanto sia fondamentale supportarli.
- Spiega come intendi utilizzarlo nel thread del discorso di WicG.
- Invia un tweet a @ChromiumDev utilizzando l'hashtag
#FileHandling
e lasciaci sapere dove e come lo si usa.
Link utili
- Spiegazione pubblica
- Demo dell'API File handling | Origine demo dell'API File handling
- Bug di monitoraggio di Chromium
- Voce ChromeStatus.com
- Componente Blink:
UI>Browser>WebAppInstalls>FileHandling
- Revisione TAG
- Posizione degli standard di Mozilla
Ringraziamenti
L'API File handling è stata specificata da Eric Willigers, Jay Harris e Raymes Khoury. Questo articolo è stato esaminato da Mario Rossi.