API de Launch Handler

Controla cómo se inicia tu app.

La API de Launch Handler te permite controlar cómo se inicia tu app, por ejemplo, si usa una ventana existente o nueva, y si se navega a la URL de inicio por la ventana elegida. Al igual que con la API de File Handing, también se pone en cola un objeto LaunchParams en el window.launchQueue de la página iniciada.

Estado actual

Step Estado
1. Crear explicación Completo
2. Crea el borrador inicial de la especificación Completo
3. Recopilar retroalimentación e iterar el diseño Completado
4. Prueba de origen. Completado
5. Lanzamiento Completo

Cómo usar la API de Launch Handler

Navegadores compatibles

El controlador de inicio solo está disponible en ChromeOS.

Navegadores compatibles

  • 110
  • 110
  • x
  • x

Origen

Interfaces

La API Launch Handler define dos interfaces nuevas.

LaunchParams : Es un objeto que contiene el targetURL que controlará el consumidor. LaunchQueue : Las colas se inician hasta que el consumidor especificado las maneja.

El miembro del manifiesto launch_handler

Para especificar de forma declarativa el comportamiento de inicio de tu app, agrega el miembro launch_handler del manifiesto al manifiesto. Tiene un subcampo llamado client_mode. Te permite controlar si se debe iniciar un cliente nuevo o existente, y si se debe navegar por él. En el siguiente ejemplo, se muestra un archivo con valores de ejemplo que siempre enrutaría todos los lanzamientos a un cliente nuevo.

{
  "launch_handler": {
    "client_mode": "navigate-new"
  }
}

Si no se especifica, el valor predeterminado de launch_handler es {"client_mode": "auto"}. Los valores permitidos para los subcampos son los siguientes:

  • client_mode:
    • navigate-new: Se crea un nuevo contexto de navegación en una ventana de app web para cargar la URL de destino del inicio.
    • navigate-existing: La última interacción con el contexto de navegación en la ventana de una app web se navega a la URL de destino del lanzamiento.
    • focus-existing: Se elige la última interacción con el contexto de navegación en la ventana de una aplicación web para controlar el inicio. Un objeto LaunchParams nuevo con el targetURL configurado en la URL de inicio se pondrá en cola en el window.launchQueue del documento.
    • auto: El comportamiento depende del usuario-agente para decidir qué funciona mejor para la plataforma. Por ejemplo, los dispositivos móviles solo admiten clientes individuales y usarían existing-client, mientras que los dispositivos de escritorio admiten varias ventanas y usarían navigate-new para evitar la pérdida de datos.

La propiedad client_mode también acepta una lista (arreglo) de valores, en la que se usará el primer valor válido. Esto permite que se agreguen valores nuevos a la especificación sin que se interrumpa la retrocompatibilidad con las implementaciones existentes.

Por ejemplo, si se agregara el valor hipotético "focus-matching-url", los sitios especificarían "client_mode": ["focus-matching-url", "navigate-existing"] para seguir controlando el comportamiento de los navegadores más antiguos que no admitían "focus-matching-url".

Cómo usar window.launchQueue

En el siguiente código, la función extractSongID() extrae un songID de la URL que se pasa en el inicio. Se usa para reproducir una canción en una AWP de reproductor de música.

if ('launchQueue' in window) {
  launchQueue.setConsumer((launchParams) => {
    if (launchParams.targetURL) {
      const songID = extractSongId(launchParams.targetURL);
      if (songID) {
        playSong(songID);
      }
    }
  });
}

Demostración

Puedes ver una demostración de la API de Launch Handler en acción en la PWA Launch Handler. Asegúrate de revisar el código fuente de la aplicación para ver cómo usa la API de Launch Handler.

  1. Instala la app de Musicr 2.0 en un dispositivo ChromeOS.
  2. Envíate un vínculo en una aplicación de chat con el formato https://launch-handler.glitch.me?track=https://example.com/music.mp3. (Puedes personalizar https://example.com/music.mp3 para cualquier URL que apunte a un archivo de audio, por ejemplo, https://launch-handler.glitch.me?track=https://cdn.glitch.me/3e952c9c-4d6d-4de4-9873-23cf976b422e%2Ffile_example_MP3_700KB.mp3?v=1638795977190).
  3. Haz clic en el vínculo en tu app de chat y observa cómo Musicr 2.0 se abre y reproduce la pista.
  4. Vuelve a hacer clic en el vínculo en tu app de chat y observa que no obtendrás una segunda instancia de Musicr 2.0.

Comentarios

El equipo de Chromium quiere conocer tu experiencia con la API de Launch Handler.

Cuéntanos sobre el diseño de la API

¿Hay algo acerca de la API que no funciona como esperabas? ¿O faltan métodos o propiedades que necesitas para implementar tu idea? ¿Tienes alguna pregunta o comentario sobre el modelo de seguridad? Informa sobre un problema de especificaciones en el repositorio de GitHub correspondiente o agrega tu opinión a un problema existente.

Informar un problema con la implementación

¿Encontraste un error en la implementación de Chromium? ¿O es diferente la implementación de las especificaciones? Informa un error en new.crbug.com. Asegúrate de incluir todos los detalles que puedas, además de instrucciones simples para reproducir el problema, e ingresa Blink>AppManifest en el cuadro Componentes. Glitch funciona muy bien para compartir representantes rápidos y fáciles.

Demuestra compatibilidad con la API

¿Planeas usar la API de Launch Handler? Tu apoyo público ayuda al equipo de Chromium a priorizar las funciones y muestra a otros proveedores de navegadores la importancia de admitirlas.

Envía un tuit a @ChromiumDev con el hashtag #LaunchHandler y cuéntanos dónde y cómo lo estás usando.

Vínculos útiles