Consenti alle applicazioni web installate di essere gestori di file

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

Supporto dei browser

  • Chrome: 102.
  • Edge: 102.
  • Firefox: non supportato.
  • Safari: non supportato.

Origine

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 di ImageResource . 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, Array LaunchParams.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.

La finestra di ricerca di macOS con un file Excalidraw.
. Fai doppio clic o fai clic con il tasto destro del mouse su un file in Esplora file del tuo sistema operativo.
di Gemini Advanced.
.
. Il menu contestuale che viene visualizzato quando fai clic con il tasto destro del mouse su un file con l'elemento Apri con... Excalidraw evidenziato.
Excalidraw è il gestore di file predefinito per i file .excalidraw.

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.

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.

Link utili

Ringraziamenti

L'API File handling è stata specificata da Eric Willigers, Jay Harris e Raymes Khoury. Questo articolo è stato esaminato da Mario Rossi.