Permitir que las aplicaciones web instaladas sean controladores de archivos

Registra una app como controlador de archivos en el sistema operativo.

Ahora que las aplicaciones web son capaces de leer y escribir archivos, la siguiente l�gica paso es permitir que los desarrolladores declaren estas aplicaciones web como controladores de archivos para los archivos que sus aplicaciones pueden crear y procesar. La API de File Handling te permite hacer exactamente esto. Despu�s de registrar un mensaje de texto editor de archivos como controlador de archivos y, despu�s de instalarla, puedes hacer clic con el bot�n derecho en un archivo .txt en macOS y selecciona "Obtener informaci�n" para indicarle al SO que siempre debe abrir los archivos .txt con esta app como de forma predeterminada.

Casos de uso sugeridos para la API de File Handling

Estos son algunos ejemplos de sitios que pueden usar esta API:

  • Aplicaciones de Office, como editores de texto, aplicaciones de hojas de c�lculo y creadores de presentaciones de diapositivas.
  • Editores de gr�ficos y herramientas de dibujo
  • Herramientas del editor de niveles del videojuego

C�mo utilizar la API de File Handling

Mejora progresiva

La API de File Handling no puede tener polyfill. La funcionalidad de abrir archivos con un aplicaci�n, se puede lograr a trav�s de otros dos medios:

  • La API de Web Share Target permite que los desarrolladores especifiquen su app como objetivo de uso compartido para que los archivos se puedan abrir desde la hoja para compartir del sistema operativo.
  • La API de File System Access se puede integrar para arrastrar y soltar archivos, as� que los desarrolladores pueden controlar los archivos descartados en la app ya abierta.

Navegadores compatibles

Navegadores compatibles

  • Chrome: 102.
  • Edge: 102.
  • Firefox: No es compatible.
  • Safari: no es compatible.

Origen

Detecci�n de funciones

Para verificar si se admite la API de File Handling, usa lo siguiente:

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

La parte declarativa de la API de File Handling

Como primer paso, las aplicaciones web deben describir de forma declarativa en su manifiesto de aplicaciones web. qu� tipo de archivos pueden manejar. La API de File Handling extiende el manifiesto de la aplicaci�n web con un nuevo llamada "file_handlers", que acepta un array de controladores de archivos. Un controlador de archivos es un objeto con estas propiedades:

  • Una propiedad "action" que dirige a una URL dentro del alcance de la app como su valor.
  • Una propiedad "accept" con un objeto de tipos MIME como claves y listas de extensiones de archivo como su de salida.
  • Una propiedad "icons" con un array de ImageResource �conos. Algunos sistemas operativos permiten que una asociaci�n de tipo de archivo muestre un �cono que no es solo el icono de la aplicaci�n asociada, sino un icono especial relacionado con el uso de ese tipo de archivo con la aplicaci�n.
  • Una propiedad "launch_type" que define si se deben abrir varios archivos en un solo archivo o en varios clientes. El valor predeterminado es�"single-client". Si el usuario abre varios archivos y si el controlador de archivos se ha anotado con "multiple-clients" como su "launch_type", se iniciar� m�s de un inicio de app y, para cada inicio, el Array LaunchParams.files (consulta m�s abajo) solo tendr� un elemento.

El siguiente ejemplo, en el que se muestra solo el extracto relevante del manifiesto de la aplicaci�n web, deber�a hacer que m�s clara:

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

Esto es para una aplicaci�n hipot�tica que controla archivos de valores separados por comas (.csv) en /open-csv, archivos de gr�ficos vectoriales escalables (.svg) en /open-svg y un formato de archivo Grafr inventado con cualquiera de .grafr, .graf o .graph como la extensi�n en /open-graf. Las dos primeras se abrir�n en un solo cliente, el �ltimo en varios clientes si se administran varios archivos.

La parte imperativa de la API de File Handling

Ahora que la app declar�, en teor�a, qu� archivos puede controlar y en qu� URL dentro del alcance, en teor�a, debe hacer algo con los archivos entrantes en la pr�ctica. Aqu� es donde aparece launchQueue. en juego. Para acceder a los archivos que se lanzaron, un sitio debe especificar un consumidor para el window.launchQueue . Los lanzamientos se ponen en cola hasta que los maneja el consumidor especificado, que se invoca. exactamente una vez para cada lanzamiento. De esta manera, se controla cada lanzamiento, sin importar cu�ndo consumidor.

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

Compatibilidad con Herramientas para desarrolladores

No se brinda asistencia para Herramientas para desarrolladores en el momento en que se redact� este documento, pero expliqu� un mensaje solicitud de funci�n para que la asistencia agregado.

Demostraci�n

Agregu� la compatibilidad con el manejo de archivos a Excalidraw, una app de dibujo con estilo de dibujos animados. Para probarlo, primero debes instalar Excalidraw. Cuando creas un archivo con �l y lo almacenas en alg�n lugar tu sistema de archivos, puedes abrir el archivo haciendo doble clic o haciendo clic con el bot�n derecho y, luego, seleccionar "Excalidraw" en el men� contextual. Puedes consultar la implementaci�n en la fuente c�digo.

La ventana del buscador de macOS con un archivo Excalidraw.
Haz doble clic o haz clic con el bot�n derecho en un archivo del explorador de archivos del sistema operativo.
El men� contextual que aparece cuando haces clic con el bot�n derecho en un archivo con el elemento Open with... Excalidraw destacado.
. Excalidraw es el controlador de archivos predeterminado para los archivos .excalidraw.

Seguridad

El equipo de Chrome dise�� e implement� la API de File Handling con los principios b�sicos definidos. en C�mo controlar el acceso a funciones potentes de la plataforma web, incluido el control del usuario, transparencia y ergonom�a.

Permisos, persistencia de permisos y actualizaciones del controlador de archivos

Para garantizar la confianza de los usuarios y la seguridad de sus cuando la API de File Handling abre un archivo, se mostrar� una solicitud de permiso antes de que la AWP pueda ver un archivo. Se mostrar� esta solicitud de permiso justo despu�s de que el usuario selecciona la AWP para abrir un archivo, de modo que el permiso est� estrechamente vinculado al de abrir un archivo con la AWP y hacerlo m�s comprensible y relevante.

Este permiso se mostrar� siempre hasta que el usuario haga clic en Permitir o Bloquear el manejo de archivos. para el sitio o ignora el mensaje tres veces (despu�s de lo cual, Chromium aplicar� un embargo y bloquear� permiso). El par�metro de configuraci�n seleccionado persistir� cuando la AWP se cierre y se vuelva a abrir.

Cuando se detectan actualizaciones y cambios del manifiesto en la secci�n "file_handlers", los permisos se restablecer�.

Existe una gran categor�a de vectores de ataque que se abre permitiendo que los sitios web accedan a los archivos. Estos se detallan en el art�culo sobre la API de File System Access. El capacidad adicional de seguridad pertinente que la API de File Handling proporciona a trav�s del sistema de archivos La API de acceso es la capacidad de otorgar acceso a determinados archivos a trav�s de la clave a trav�s de un selector de archivos que muestra una aplicaci�n web.

A�n existe el riesgo de que los usuarios otorguen accidentalmente acceso a un archivo a una aplicaci�n web abri�ndola. Sin embargo, se sabe generalmente que abrir un archivo permite que la aplicaci�n sea abierto para leer o manipular ese archivo. Por lo tanto, la elecci�n expl�cita del usuario de abrir un archivo en una aplicaci�n instalada, por ejemplo, mediante una ventana "Abrir con..." men� contextual, se puede leer como una cantidad suficiente una se�al de confianza en la aplicaci�n.

Desaf�os de los controladores predeterminados

La excepci�n se da cuando no hay aplicaciones en el sistema host para un tipo de archivo determinado. En En este caso, algunos sistemas operativos del host pueden promover autom�ticamente el controlador reci�n registrado al para ese tipo de archivo de forma silenciosa y sin intervenci�n del usuario. De esta forma, si el usuario hace doble clic en un archivo de ese tipo, este se abrir� autom�ticamente en la aplicaci�n web. En los sistemas operativos host, cuando el usuario-agente determina que no hay predeterminado para el tipo de archivo, puede ser necesaria una solicitud de permiso expl�cito para evitar enviar accidentalmente el contenido de un archivo a una aplicaci�n web sin el consentimiento del usuario.

Control de usuarios

Las especificaciones establecen que los navegadores no deben registrar todos los sitios que pueden manejar archivos como archivos controlador. En su lugar, el registro del manejo de archivos debe estar restringido detr�s de la instalaci�n y nunca debe ocurrir. sin la confirmaci�n expl�cita del usuario, especialmente si un sitio se convertir� en el controlador predeterminado. Antes que que usurpar extensiones existentes como .json, ya que es probable que el usuario ya tenga un controlador predeterminado se registraron, los sitios deber�an considerar crear sus propias extensiones.

Transparencia

Todos los sistemas operativos permiten a los usuarios cambiar las asociaciones de archivos actuales. Esto est� fuera del alcance del navegador.

Comentarios

El equipo de Chrome quiere conocer tu experiencia con la API de File Handling.

Cu�ntanos sobre el dise�o de la API

�Algo en la API no funciona como esperabas? �O faltan m�todos o propiedades que necesitas para implementar tu idea? Haz una pregunta o comentario sobre la seguridad modelo?

  • Informa un problema de especificaciones en el repositorio de GitHub correspondiente o agrega lo que piensas a un archivo problema.

Informar un problema con la implementaci�n

�Encontraste un error en la implementaci�n de Chrome? �O la implementaci�n es diferente de la especificaci�n?

  • Informa un error en new.crbug.com. Aseg�rate de incluir todos los detalles que instrucciones sencillas para reproducir e ingresa UI>Browser>WebAppInstalls>FileHandling en en el cuadro Componentes. Glitch funciona muy bien para compartir contenido de forma r�pida y sencilla. repros.

Demuestra compatibilidad con la API

�Planeas usar la API de File Handling? Tu asistencia p�blica ayuda al equipo de Chrome a prioriza funciones y muestra a otros proveedores de navegadores la importancia de admitirlas.

V�nculos �tiles

Agradecimientos

Eric Willigers especific� la API de File Handling, Jay Harris y Raymes Khoury. Este art�culo fue revisado por Joe Medley.