Permite que las AWP instaladas controlen los vínculos que usan un protocolo específico para obtener una experiencia más integrada.
Información sobre los esquemas (también conocidos como protocolos)
Un identificador uniforme de recursos (URI) es una secuencia compacta de caracteres que identifica un recurso abstracto o físico. Cada URI comienza con un nombre de esquema que hace referencia a una especificación para asignar identificadores dentro de ese esquema. Por lo tanto, la sintaxis de URI es un sistema de nombres federado y extensible en el que la especificación de cada esquema puede restringir aún más la sintaxis y la semántica de los identificadores que usan ese esquema. Los esquemas también se conocen como protocolos. Puedes ver algunos ejemplos de esquemas.
tel:+1-816-555-1212
mailto:Jane.Doe@example.com
news:comp.infosystems.www.servers.unix
https://web.dev/
El término localizador de recursos uniforme (URL) hace referencia al subconjunto de URI que, además de identificar un recurso, proporcionan un medio para localizarlo describiendo su mecanismo de acceso principal (p.ej., su ubicación de red).
Información general sobre el método registerProtocolHandler()
El método Navigator de solo contenido seguro registerProtocolHandler() permite que los sitios registren su capacidad para abrir o controlar esquemas de URL específicos. Por lo tanto, los sitios deben llamar al método de la siguiente manera: navigator.registerProtocolHandler(scheme, url). Los dos parámetros se definen de la siguiente manera:
scheme: Es una cadena que contiene el protocolo que el sitio desea controlar.url: Es una cadena que contiene la URL del controlador. Esta URL debe incluir%scomo marcador de posición, que se reemplazará por la URL con escape que se controlará.
El esquema debe ser uno de los
esquemas incluidos en la lista de entidades permitidas
(por ejemplo, mailto, bitcoin o magnet) o comenzar con web+, seguido de al menos una o
más letras ASCII en minúscula después del prefijo web+, como web+coffee.
Para que quede más claro, aquí tienes un ejemplo concreto del flujo:
- El usuario visita un sitio en
https://coffeeshop.example.com/que realiza la siguiente llamada:navigator.registerProtocolHandler('web+coffee', 'coffee?type=%s'). - Más adelante, mientras visita
https://randomsite.example.com/, el usuario hace clic en un vínculo, como<a href="web+coffee:latte-macchiato">All about latte macchiato</a>. - Esto hace que el navegador navegue a la siguiente URL:
https://coffeeshop.example.com/coffee?type=web%2Bcoffee%3A%2F%2Flatte-macchiato. La cadena de búsqueda decodificada de la URL se lee como?type=web+coffee://latte-macchiato.
De qué se trata el control de protocolos
El mecanismo actual de registro de controladores de protocolo de URL para AWP consiste en ofrecer el registro de controladores de protocolo
como parte de la instalación de una AWP a través de su manifiesto. Después de registrar una AWP como un
controlador de protocolo, cuando un usuario haga clic en un hipervínculo con un esquema específico, como mailto,
bitcoin o web+music, desde un navegador o una app específica de la plataforma, se abrirá la AWP registrada
y recibirá la URL. Es importante tener en cuenta que tanto el registro basado en el manifiesto propuesto como el registerProtocolHandler() tradicional desempeñan funciones muy similares en la práctica, a la vez que permiten la posibilidad de experiencias del usuario complementarias:
- Las similitudes incluyen requisitos relacionados con la lista de esquemas que se pueden registrar, el nombre y el formato de los parámetros, etcétera.
- Las diferencias en el registro basado en el manifiesto son sutiles, pero pueden ser útiles para mejorar la experiencia de los usuarios de las AWP. Por ejemplo, es posible que el registro de AWP basado en manifiestos no requiera una acción adicional del usuario, aparte de la instalación de la AWP iniciada por el usuario.
Casos de uso
- En una PWA de procesamiento de texto, el usuario de un documento encuentra un vínculo a una presentación como
web+presentations://deck2378465. Cuando el usuario hace clic en el vínculo, la PWA de presentación se abre automáticamente en el alcance correcto y muestra la presentación de diapositivas. - En una app de chat específica de la plataforma, el usuario recibe un vínculo a una URL de
magneten un mensaje de chat. Cuando se hace clic en el vínculo, se inicia una AWP de torrent instalada y comienza la descarga. - El usuario tiene instalada una PWA de transmisión de música. Cuando un amigo comparte un vínculo a una canción, como
web+music://songid=1234&time=0:13, y el usuario hace clic en él, la AWP de transmisión de música se iniciará automáticamente en una ventana independiente.
Cómo usar el registro de controladores de protocolo de URL para las AWP
La API para el registro de controladores de protocolo de URL se basa en gran medida en
navigator.registerProtocolHandler(). Solo que, esta vez, la información se pasa de forma declarativa con el manifiesto de la app web en una propiedad nueva llamada "protocol_handlers" que toma un array de objetos con las dos claves obligatorias "protocol" y "url". En el siguiente fragmento de código, se muestra cómo registrar web+tea y web+coffee. Los valores son cadenas que contienen la URL del controlador con el marcador de posición %s obligatorio para la URL con escape.
{
"protocol_handlers": [
{
"protocol": "web+tea",
"url": "/tea?type=%s"
},
{
"protocol": "web+coffee",
"url": "/coffee?type=%s"
}
]
}
Varias apps que se registran para el mismo protocolo
Si varias aplicaciones se registran como controladores para el mismo esquema, por ejemplo, el protocolo mailto, el sistema operativo mostrará al usuario un selector y le permitirá decidir cuál de los controladores registrados usar.
La misma app se registra para varios protocolos
La misma app puede registrarse para varios protocolos, como se puede ver en la muestra de código.
Actualizaciones de la app y registro de controladores
Los registros de controladores se sincronizan con la versión más reciente del manifiesto que proporciona la app. Existen dos casos:
- Una actualización que agrega controladores nuevos activa el registro de controladores (independiente de la instalación de la app).
- Una actualización que quita controladores activa la cancelación del registro de controladores (independiente de la desinstalación de la app).
Depuración de controladores de protocolos en Herramientas para desarrolladores
Navega a la sección Controladores de protocolo con el panel Aplicación > Manifiesto. Puedes ver y probar todos los protocolos disponibles aquí.

Consideraciones de seguridad
Dado que la instalación de la AWP requiere que el contexto sea seguro, el control de protocolos hereda esta restricción. La lista de controladores de protocolo registrados no se expone a la Web de ninguna manera, por lo que no se puede usar como un vector de huellas digitales.
Intentos de navegación no iniciados por el usuario
Es posible que los intentos de navegación que no inicie el usuario, sino que sean programáticos, no abran apps. La URL del protocolo personalizado solo se puede usar en contextos de navegación de nivel superior, pero no, por ejemplo, como la URL de un iframe.
Lista de protocolos permitidos
Al igual que con registerProtocolHandler(), existe una lista de entidades permitidas de protocolos que las apps pueden registrar para controlar.
Mensaje de consentimiento
En el primer lanzamiento de la PWA debido a un protocolo invocado, se le presentará al usuario un diálogo de permiso. En este diálogo, se mostrarán el nombre y el origen de la app, y se le preguntará al usuario si la app puede controlar los vínculos del protocolo. Si un usuario rechaza el diálogo de permiso, el sistema operativo ignorará el controlador de protocolo registrado. Para cancelar el registro del controlador de protocolo, el usuario debe desinstalar la AWP que lo registró. El navegador también cancelará el registro del controlador de protocolo si el usuario selecciona "Recordar mi elección" y "No permitir".
Comentarios
El equipo de Chromium quiere conocer tus experiencias con el registro de controladores de protocolo de URL para AWPs.
Cuéntanos sobre el diseño de la API
¿Hay algo en 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 un problema de especificación en el repositorio de GitHub correspondiente o agrega tus comentarios a un problema existente.
Informa un problema con la implementación
¿Encontraste un error en la implementación de Chromium? ¿O la implementación es diferente de la especificación?
Informa un error en new.crbug.com. Asegúrate de incluir tantos detalles como puedas,
instrucciones para reproducirlo y, luego, ingresa UI>Browser>WebAppInstalls en el cuadro
Componentes.
Muestra compatibilidad con la API
¿Planeas usar el registro de controladores de protocolo de URL para las AWP? Tu apoyo público ayuda al equipo de Chromium a priorizar las funciones y les muestra a otros proveedores de navegadores lo importante que es admitirlas.
Comparte cómo planeas usarlo en la conversación de Discourse de WICG. Envía un tweet a
@ChromiumDev con el hashtag
#ProtocolHandler
y cuéntanos dónde y cómo lo usas.
Vínculos útiles
- Explicativa
- Borrador de especificaciones
- GitHub
- ChromeStatus
- Error de Chromium
- Revisión de TAG
- Discourse
Agradecimientos
Fabio Rocha, Diego González, Connor Moody y Samuel Tang del equipo de Microsoft Edge implementaron y especificaron el registro de controladores de protocolo de URL para las AWP. Este documento fue revisado por Joe Medley y Fabio Rocha.