Permite que las AWP instaladas manejen vínculos que usen 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 físico o abstracto. 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. 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) 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).
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 en particular. 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 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
. Luego, la cadena de búsqueda decodificada por URL lee?type=web+coffee://latte-macchiato
.
De qué se trata el manejo de protocolos
El mecanismo de registro de controladores de protocolo de URL para AWP actual ofrece 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, en la práctica, el registro propuesto basado en manifiestos y el registerProtocolHandler()
tradicional desempeñan funciones muy similares, 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 manifiestos son sutiles, pero pueden ser útiles para mejorar la experiencia de los usuarios de la AWP. Por ejemplo, es posible que el registro de la AWP basado en manifiestos no requiera una acción adicional del usuario además de la instalación de la AWP iniciada por el usuario.
Casos de uso
- En una AWP de procesamiento de texto, el usuario encuentra un vínculo a una presentación como
web+presentations://deck2378465
en un documento. 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 una plataforma, el usuario en un mensaje de chat recibe un vínculo a una URL de
magnet
. Cuando se hace clic en el vínculo, se inicia una AWP de torrent instalada y se comienza a descargar. - 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 inicia 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 manera estrecha en 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 propiedad nueva llamada "protocol_handlers"
que toma un array de objetos con las dos claves requeridas "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 del 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 puedes ver en la muestra de código anterior.
Actualizaciones de apps y registro de controladores
Los registros de controladores se sincronizan con la versión de manifiesto más reciente que proporciona la app. Hay dos casos:
- Una actualización que agrega controladores nuevos activa el registro de controladores (separado de la instalación de la app).
- Una actualización que quita los controladores activa la anulación de su registro (por separado de la desinstalación de la app).
Depuración del controlador de protocolos en DevTools
Navega a la sección Protocol Handlers a través del panel Application > Manifest. Puedes ver y probar todos los protocolos disponibles aquí.
Por ejemplo, instala esta AWP de demostración. En la sección Protocol Handlers, escribe "americano" y haz clic en Test protocol para abrir la página de café en la AWP.
Demostración
Puedes ver una demostración del registro de controladores de protocolo de URL para AWPs en Glitch.
- Ve a https://protocol-handler.glitch.me/, instala la app web progresiva y vuelve a cargar la app después de la instalación. El navegador ahora registró la AWP como un controlador para el protocolo
web+coffee
con el sistema operativo. - En la ventana de la AWP instalada, haz clic en el vínculo https://protocol-handler-link.glitch.me/. Se abrirá una pestaña nueva del navegador con tres vínculos. Haz clic en el primero o el segundo (latte macchiato o americano). Ahora, el navegador te mostrará un mensaje y te preguntará si estás de acuerdo con que la app sea un controlador de protocolo para el protocolo
web+coffee
. Si aceptas, se abrirá la AWP y se mostrará el café seleccionado. - Para compararlo con el flujo tradicional que usa
navigator.registerProtocolHandler()
, haz clic en el botón Register protocol handler en la AWP. Luego, en la pestaña del navegador, haz clic en el tercer vínculo (chai). Del mismo modo, mostrará un mensaje, pero, luego, abrirá la AWP en una pestaña, no en una ventana del navegador. - Envíate un mensaje a ti mismo en una aplicación específica de la plataforma, como Skype en Windows, con un vínculo como
<a href="web+coffee://americano">Americano</a>
y, luego, haz clic en él. También debería abrir la PWA instalada.
Consideraciones de seguridad
Dado que la instalación de la AWP requiere que el contexto sea seguro, el manejo 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 creación de huellas digitales.
Intentos de navegación que no inició el usuario
Es posible que los intentos de navegación que el usuario no inicia, 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 protocolos permitidos
Al igual que con registerProtocolHandler()
, hay una lista de entidades permitidas de protocolos que las apps pueden registrar para controlar.
Mensaje de consentimiento
En el primer inicio de la AWP debido a un protocolo invocado, se le mostrará al usuario un diálogo de permiso. En este diálogo, se mostrará el nombre y el origen de la app, y se le preguntará al usuario si esta puede controlar los vínculos del protocolo. Si un usuario rechaza el diálogo de permisos, el sistema operativo ignorará el controlador del protocolo registrado. Para cancelar el registro del controlador de protocolo, el usuario debe desinstalar la AWP que lo registró. El navegador también anulará 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
¿Algo en la API 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.
Denuncia 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 puedas, además de instrucciones simples para la reproducción, y, luego, ingresa UI>Browser>WebAppInstalls
en el cuadro Componentes. Glitch es excelente para compartir reproducciones rápidas y fáciles.
Cómo mostrar compatibilidad con la API
¿Planeas usar el registro de controladores de protocolo de URL para AWPs? 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 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 de TAG
- Discurso
Agradecimientos
Fabio Rocha, Diego González, Connor Moody y Samuel Tang, del equipo de Microsoft Edge, implementaron y especificaron el registro de controladores de protocolos de URL para AWP. Joe Medley y Fabio Rocha revisaron este artículo. Imagen hero de JJ Ying en Unsplash.