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
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
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 deImageResource
. 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, TableauLaunchParams.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 type="x-smartling-placeholder">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.
Problèmes liés aux fichiers
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.
- Expliquez comment vous prévoyez de l'utiliser dans le fil de discussion du discours de WiCG.
- Envoyez un tweet à @ChromiumDev en utilisant le hashtag.
#FileHandling
et laissez-nous où et comment vous l'utilisez.
Liens utiles
- Explication publique
- Démonstration de l'API File Handling | Source de la démonstration de l'API File Handling
- Bug de suivi Chromium
- Entrée ChromeStatus.com
- Composant Blink:
UI>Browser>WebAppInstalls>FileHandling
- Récapitulatif du tag
- Position des normes de Mozilla
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