Permettre aux applications Web installées de devenir gestionnaires de fichiers

Enregistre une application en tant que gestionnaire de fichiers avec le système d'exploitation.

Maintenant que les applications Web peuvent lire et écrire des fichiers, la logique suivante permet aux développeurs de déclarer ces applications Web en tant que gestionnaires de fichiers pour les fichiers que leurs applications peuvent créer et traiter. C'est exactement ce que vous permet l'API File Handling Après l'enregistrement d'un SMS Editor en tant que gestionnaire de fichiers. Après l'avoir installée, vous pouvez effectuer un clic droit sur un fichier .txt sous macOS et sélectionnez "Lire les informations" pour indiquer à l'OS qu'il doit toujours ouvrir les fichiers .txt avec cette appli en tant que par défaut.

Cas d'utilisation suggérés pour l'API File Handling

Voici quelques exemples de sites qui peuvent utiliser cette API:

  • Applications bureautiques telles que les éditeurs de texte, les tableurs et les outils de création de diaporamas
  • Éditeurs graphiques et outils de dessin.
  • Outils d'édition de niveau de jeu vidéo

Utiliser l'API File Handling

Amélioration progressive

L'API File Handling en elle-même ne peut pas être émulée. La fonctionnalité d’ouverture de fichiers avec un navigateur Web de votre application, vous pouvez toutefois y parvenir par le biais de deux autres méthodes:

  • L'API Web Share Target permet aux développeurs de spécifier leur application en tant que cible de partage afin que les fichiers puissent être ouverts à partir de la feuille de partage du système d'exploitation.
  • L'API File System Access peut être intégrée au glisser-déposer de fichiers. Ainsi, les développeurs peuvent gérer les fichiers supprimés dans l'application déjà ouverte.

Prise en charge des navigateurs

Navigateurs pris en charge

  • Chrome: 102. <ph type="x-smartling-placeholder">
  • Edge: 102. <ph type="x-smartling-placeholder">
  • Firefox: non compatible. <ph type="x-smartling-placeholder">
  • Safari: non compatible. <ph type="x-smartling-placeholder">

Source

Détection de caractéristiques

Pour vérifier si l'API File Handling est compatible, utilisez:

if ('launchQueue' in window && 'files' in LaunchParams.prototype) {
  // The File Handling API is supported.
}

La partie déclarative de l'API File Handling

Dans un premier temps, les applications Web doivent décrire le contenu de manière déclarative dans leur fichier manifeste d'application Web. du type de fichiers qu'ils peuvent gérer. L'API File Handling étend le fichier manifeste d'application Web avec un nouveau appelée "file_handlers" qui accepte un tableau de gestionnaires de fichiers. Un gestionnaire de fichiers est un objet avec les propriétés suivantes:

  • Une propriété "action" qui pointe vers une URL comprise dans le champ d'application de l'application comme valeur.
  • Une propriété "accept" avec un objet de types MIME comme clés et des listes d'extensions de fichier comme valeurs valeurs.
  • Une propriété "icons" avec un tableau de ImageResource . Certains systèmes d’exploitation permettent à une association de types de fichier d’afficher une icône qui n’est pas seulement l'icône de l'application associée, mais plutôt une icône spéciale liée à l'utilisation de ce type de fichier. avec l'application.
  • Une propriété "launch_type" qui définit si plusieurs fichiers doivent être ouverts dans un seul fichier ou chez plusieurs clients. La valeur par défaut est "single-client". Si l'utilisateur ouvre plusieurs fichiers et si le gestionnaire de fichiers a été annoté avec "multiple-clients" en tant que "launch_type", plusieurs lancements d'applis auront lieu, et pour chaque lancement, Tableau LaunchParams.files (voir plus bas) ne comportera qu'un seul élément.

L'exemple ci-dessous, qui ne montre que l'extrait approprié du fichier manifeste de l'application Web, devrait plus claire:

{
  "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"
    }
  ]
}

Il s'agit d'une application fictive qui gère des fichiers de valeurs séparées par des virgules (.csv) au niveau /open-csv, fichiers de graphiques vectoriels évolutifs (.svg) au format /open-svg et format de fichier Grafr inventé avec l'extension .grafr, .graf ou .graph à l'adresse /open-graf. Les deux premières s'ouvrent dans un seul client, le dernier dans plusieurs clients si plusieurs fichiers sont traités.

La partie impérative de l'API File Handling

Maintenant que l'application a déclaré les fichiers qu'elle peut gérer pour quelles URL couvertes, elle doit en théorie faire quelque chose de manière impérative avec les fichiers entrants dans la pratique. C'est là que launchQueue entre en jeu. entre en jeu. Pour accéder aux fichiers lancés, un site doit spécifier un consommateur pour window.launchQueue . Les lancements sont mis en file d'attente jusqu'à ce qu'ils soient gérés par le client spécifié, qui est appelé exactement une fois pour chaque lancement. De cette manière, chaque lancement est géré, quel que soit le moment client a été spécifié.

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.
    }
  });
}

Compatibilité avec les outils de développement

Pour l'instant, les outils de développement ne sont pas pris en charge, mais j'ai demandé demande de fonctionnalité à des ajouté.

Démo

J'ai ajouté la prise en charge de la gestion des fichiers à Excalidraw, une application de dessin de style dessin animé. Pour la tester, vous devez d'abord installer Excalidraw. Lorsque vous créez ensuite un fichier avec celui-ci et le stockez quelque part sur votre système de fichiers, vous pouvez ouvrir le fichier en double-cliquant ou en effectuant un clic droit, puis en sélectionnant "Excalidraw" dans le menu contextuel. Vous pouvez consulter l'implémentation dans le code source. du code source.

<ph type="x-smartling-placeholder">
</ph> Fenêtre de recherche de macOS avec un fichier Excalidraw. <ph type="x-smartling-placeholder">
</ph> Double-cliquez ou effectuez un clic droit sur un fichier dans l'explorateur de fichiers de votre système d'exploitation.
<ph type="x-smartling-placeholder">
</ph> Menu contextuel qui s&#39;affiche lorsque vous effectuez un clic droit sur un fichier pour lequel l&#39;élément &quot;Ouvrir avec... Excalidraw&quot; est mis en surbrillance. <ph type="x-smartling-placeholder">
</ph> Excalidraw est le gestionnaire de fichiers par défaut pour les fichiers .excalidraw.

Sécurité

L'équipe Chrome a conçu et mis en œuvre l'API File Handling en suivant les principes fondamentaux définis du contrôle de l'accès aux fonctionnalités puissantes de la plate-forme Web, dont le contrôle utilisateur, la transparence et l'ergonomie.

Autorisations, persistance des autorisations et mises à jour du gestionnaire de fichiers

Pour garantir la confiance des utilisateurs et la sécurité des utilisateurs lorsque l'API File Handling ouvre un fichier une invite d'autorisation s'affichera avant qu'une PWA puisse afficher un fichier. Cette invite d'autorisation s'affichera juste après que l'utilisateur a sélectionné la PWA pour ouvrir un fichier, de sorte que l'autorisation soit étroitement liée d'ouverture d'un fichier à l'aide de la PWA, ce qui le rend plus compréhensible et pertinent.

Cette autorisation s'affiche à chaque fois que l'utilisateur clique sur Autoriser ou Bloquer la gestion des fichiers. pour le site, ou ignore l'invite à trois reprises (après quoi Chromium va placer un embargo et bloquer l'autorisation). Le paramètre sélectionné sera conservé même après la fermeture et la réouverture de la PWA.

Lorsque le fichier manifeste est mis à jour ou modifié dans la section "file_handlers", les autorisations sont réinitialisés.

Il existe une grande catégorie de vecteurs d'attaque qui s'ouvrent en autorisant les sites Web à accéder aux fichiers. Celles-ci sont décrites dans le de l'API File System Access. La une fonctionnalité de sécurité supplémentaire fournie par l'API File Handling par rapport au système de fichiers L'API Access permet d'accorder l'accès à certains fichiers via l'API intégrée au système d'exploitation par opposition à un sélecteur de fichier affiché par une application Web.

Il existe toujours un risque que des utilisateurs puissent accorder involontairement à une application Web l'accès à un fichier en de l'ouvrir. Toutefois, il est généralement admis que l'ouverture d'un fichier permet à l'application ouvert pour lire et/ou manipuler ce fichier. Par conséquent, le choix explicite d'un utilisateur d'ouvrir un fichier dans une application installée, par exemple via l'option "Ouvrir avec..." dans le menu contextuel, peut être considéré de confiance dans l'application.

Tests du gestionnaire par défaut

Il existe une exception à cette règle lorsqu'il n'existe aucune application sur le système hôte pour un type de fichier donné. Dans Dans ce cas, certains systèmes d'exploitation hôtes peuvent promouvoir automatiquement le nouveau gestionnaire par défaut pour ce type de fichier en mode silencieux et sans aucune intervention de l'utilisateur. Cela permettrait signifie que si l'utilisateur double-clique sur un fichier de ce type, il s'ouvrira automatiquement dans le de votre application Web. Sur ces systèmes d'exploitation hôtes, lorsque le user-agent détermine qu'il n'existe aucune par défaut pour le type de fichier, une invite d'autorisation explicite peut être nécessaire pour éviter l'envoi accidentel du contenu d'un fichier à une application Web sans le consentement de l'utilisateur.

Contrôle des utilisateurs

La spécification stipule que les navigateurs ne doivent pas enregistrer tous les sites pouvant gérer des fichiers en tant que fichier . Au lieu de cela, l'enregistrement pour la gestion des fichiers doit être restreint après l'installation et ne jamais avoir lieu sans confirmation explicite de l'utilisateur, en particulier si un site doit devenir le gestionnaire par défaut. Plutôt que que le piratage d'extensions existantes comme .json, dont l'utilisateur dispose probablement déjà d'un gestionnaire par défaut , les sites doivent envisager de créer leurs propres extensions.

Transparence

Tous les systèmes d'exploitation permettent aux utilisateurs de modifier les associations de fichiers existantes. Ceci n'entre pas dans le champ d'application du navigateur.

Commentaires

L'équipe Chrome souhaite en savoir plus sur votre expérience avec l'API File Handling.

Présentez-nous la conception de l'API

Y a-t-il un aspect de l'API qui ne fonctionne pas comme prévu ? Ou manque-t-il des méthodes ou les propriétés dont vous avez besoin pour mettre en œuvre votre idée ? Vous avez une question ou un commentaire sur la sécurité ?

  • Signalez un problème de spécification dans le dépôt GitHub correspondant ou ajoutez vos commentaires à un problème.

Signaler un problème d'implémentation

Avez-vous détecté un bug dans l'implémentation de Chrome ? Ou l'implémentation est-elle différente des spécifications ?

  • Signalez un bug sur new.crbug.com. Assurez-vous d'inclure autant de détails que vous des instructions simples pour reproduire le problème, puis saisissez UI>Browser>WebAppInstalls>FileHandling dans la zone Composants. Glitch est idéal pour partager rapidement et facilement repros.

Apportez votre soutien à l'API

Prévoyez-vous d'utiliser l'API File Handling ? Votre assistance publique aide l'équipe Chrome à hiérarchisent les fonctionnalités et montre aux autres fournisseurs de navigateurs à quel point il est essentiel de les prendre en charge.

Liens utiles

Remerciements

L'API File Handling a été spécifiée par Eric Willigers. Jay Harris et Raymes Khoury. Cet article a été examiné par Joe Medley