Permite que las AWP instaladas controlen los vínculos que usan un protocolo específico para brindar una experiencia más integrada.
Contexto sobre 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 uniforme de recursos (URL) hace referencia al subconjunto de URIs que, además de identificar un recurso, proporcionan un medio para ubicarlo mediante la descripción de su mecanismo de acceso principal (p.ej., su ubicación de red).
Contexto sobre el método registerProtocolHandler()
El método Navigator solo para contenido seguro
registerProtocolHandler()
permite que los sitios registren su capacidad para abrir o controlar esquemas de URL particulares. 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 de escape que se controlará.
El esquema debe ser uno de los
esquemas de 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 luego lee?type=web+coffee://latte-macchiato.
Acerca del 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 una instalación de AWP a través de su manifiesto. Después de registrar una AWP como controlador de protocolo, cuando un usuario hace 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 propuesto basado en manifiesto como el registerProtocolHandler() tradicional desempeñan funciones muy similares en la práctica, al tiempo que permiten la posibilidad de experiencias de usuario complementarias:
- Las similitudes incluyen requisitos en torno a 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 manifiesto son sutiles, pero pueden ser útiles para mejorar la experiencia de los usuarios de AWP. Por ejemplo, el registro de AWP basado en manifiesto podría no requerir una acción adicional del usuario, aparte de la instalación de la AWP iniciada por el usuario.
Casos de uso
- En una AWP de procesamiento de textos, 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 AWP 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 de un mensaje de chat recibe un vínculo a una URL
magnet. Cuando se hace clic en el vínculo, se inicia una AWP de torrent instalada y comienza la descarga. - El usuario tiene instalada una AWP de transmisión de música. Cuando un amigo comparte un vínculo a una canción como
web+music://songid=1234&time=0:13y 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 AWP
La API para el registro de controladores de protocolo de URL se modela de cerca en navigator.registerProtocolHandler(). 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 de 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 le mostrará al usuario un selector y le permitirá decidir cuál de los controladores registrados usar.
La misma app que se registra para varios protocolos
La misma app puede registrarse para varios protocolos, como puedes ver en la muestra de código.
Actualizaciones de apps y registro de controladores
Los registros de controladores se sincronizan con la versión más reciente del manifiesto que proporciona la app. Hay dos casos:
- Una actualización que agrega controladores nuevos activa el registro de controladores (aparte de la instalación de la app).
- Una actualización que quita controladores activa la cancelación del registro de controladores (aparte de la desinstalación de la app).
Depuración del controlador de protocolos en Herramientas para desarrolladores
Navega a la sección Protocol Handlers con el panel Application > Manifest. Aquí puedes ver y probar todos los protocolos disponibles.

Consideraciones de seguridad
Dado que la instalación de 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 vector de huella digital.
Intentos de navegación no iniciados por el usuario
Es posible que los intentos de navegación que no inicia el usuario, pero que son 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 entidades permitidas de protocolos
Al igual que con registerProtocolHandler(), existe una lista de entidades permitidas de protocolos que las apps pueden registrar para controlar.
Solicitud de consentimiento
En el primer lanzamiento de la AWP debido a un protocolo invocado, el usuario verá un diálogo de permisos. En este diálogo, se mostrará el nombre y el origen de la app, y se le preguntará al usuario si la app puede controlar vínculos del protocolo. Si un usuario rechaza el diálogo de permisos, 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 AWP.
Cuéntanos sobre el diseño de la API
¿Hay algo sobre 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 ideas a un problema existente.
Informa un problema con la implementación
¿Encontraste un error con 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 sea posible,
instrucciones para reproducir el error y, además, ingresa UI>Browser>WebAppInstalls en el cuadro Components.
Muestra compatibilidad con la API
¿Planeas usar el registro de controladores de protocolo de URL para AWP? Tu apoyo público ayuda al equipo de Chromium a priorizar funciones y muestra a otros proveedores de navegadores lo fundamental que es admitirlas.
Comparte cómo planeas usarlo en el hilo de WICG Discourse. Envía un tweet a
@ChromiumDev con el hashtag
#ProtocolHandler
y cuéntanos dónde y cómo lo usas.
Vínculos útiles
- Video explicativo
- 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 AWP. Este documento fue revisado por Joe Medley y Fabio Rocha.