Permite que las AWP instaladas controlen los vínculos que usan un protocolo específico para brindar una experiencia más integrada.
Información general sobre los esquemas (también conocidos como protocolos)
Un identificador de recursos uniforme (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 nomenclatura 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. A continuación, 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) se refiere al subconjunto de URIs que, además de identificar un recurso, proporcionan un medio para ubicarlo 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 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%s
como marcador de posición que se reemplazará por la URL con caracteres de escape que se controlará.
El esquema debe ser uno de los esquemas incluidos en la lista de entidades seguras (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+
, por ejemplo, web+coffee
.
Para que esto 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
.
Acerca del control de protocolos
El mecanismo actual de registro de controladores de protocolo de URL para AWPs se trata de 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 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 propuesto basado en el manifiesto como el registerProtocolHandler()
tradicional desempeñan roles 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 la PWA. Por ejemplo, el registro de la PWA basado en el manifiesto podría no requerir una acción adicional del usuario, aparte de la instalación de la PWA iniciada por el usuario.
Casos de uso
- En una PWA 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 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 para una plataforma, el usuario de un mensaje de chat recibe un vínculo a una URL de
magnet
. Cuando haces 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: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 AWPs
La API para el registro de controladores de protocolos de URL se modela de forma similar a navigator.registerProtocolHandler()
. Solo que, esta vez, la información se pasa de forma declarativa a través del manifiesto de la app web en una nueva propiedad 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
requerido para la URL con escape.
{
"protocol_handlers": [
{
"protocol": "web+tea",
"url": "/tea?type=%s"
},
{
"protocol": "web+coffee",
"url": "/coffee?type=%s"
}
]
}
Varias apps 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 se registra para varios protocolos
La misma app puede registrarse para varios protocolos, como se puede ver en el ejemplo de código anterior.
Actualizaciones de la app y registro del controlador
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 (independiente de la instalación de la app).
- Una actualización que quita controladores activa la anulació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 Protocol Handlers a través del panel Application > Manifest. Aquí puedes ver y probar todos los protocolos disponibles.
Consideraciones de seguridad
Dado que la instalación de la PWA 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 no se abran las apps en los intentos de navegación que no inicie el usuario, sino que sean programáticos. 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.
Mensaje de consentimiento
En el primer lanzamiento de la PWA debido a un protocolo invocado, se le mostrará 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 se le permite a la app controlar los 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 PWA que lo registró. El navegador también anulará el registro del controlador de protocolo si el usuario selecciona "Recordar mi elección" y, luego, "No permitir".
Comentarios
El equipo de Chromium quiere conocer tu experiencia 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 tu opinión 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?
Presenta un error en new.crbug.com. Asegúrate de incluir tantos detalles como sea posible, instrucciones simples para reproducir el error y, luego, ingresa UI>Browser>WebAppInstalls
en el cuadro Components.
Cómo mostrar 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 funciones y muestra a otros proveedores de navegadores lo importante que es admitirlas.
Comparte cómo planeas usarlo en el hilo de Discourse del WICG. Envía un tuit a @ChromiumDev con el hashtag #ProtocolHandler
y cuéntanos dónde y cómo lo usas.
Vínculos útiles
- Explicación
- Borrador de especificaciones
- GitHub
- ChromeStatus
- Error de Chromium
- Revisión del TAG
- Discourse
Agradecimientos
El registro de controladores de protocolo de URL para las AWP se implementó y especificó por Fabio Rocha, Diego González, Connor Moody y Samuel Tang del equipo de Microsoft Edge. Joe Medley y Fabio Rocha revisaron este artículo. Imagen hero de JJ Ying en Unsplash.