Prepara tu extensión mientras comenzamos a probar un nuevo menú de extensiones

Fecha de publicación: 19 de noviembre de 2024

En Google I/O 2024, compartimos algunos diseños iniciales de los próximos cambios en el menú de extensiones, que les brindan a los usuarios más control sobre los sitios a los que pueden acceder las extensiones. Pronto comenzaremos a probar estos cambios, primero con un pequeño porcentaje de usuarios en Canary, y esperamos lanzarlos de forma más amplia en el futuro.

Cuando hablábamos con los desarrolladores sobre este cambio en el pasado, a menudo escuchábamos inquietudes sobre el impacto de cambiar la forma en que las extensiones pueden solicitar permisos de host en el momento de la instalación. El nuevo menú no afecta ningún comportamiento predeterminado. Las extensiones seguirán teniendo acceso a todos los hosts solicitados en el momento de la instalación. El objetivo de estos cambios es facilitar que los usuarios descubran los controles que ya están disponibles.

En esta publicación, se proporciona una descripción general de lo que puedes esperar y cómo puedes preparar tus extensiones con una nueva API para controlar los casos en los que el usuario retuvo el acceso a una página.

¿Cuáles son los cambios?

Para brindarles más control a los usuarios, presentaremos un nuevo menú de extensiones. Las extensiones seguirán teniendo acceso a todos los hosts solicitados en el momento de la instalación, pero los usuarios ahora tendrán una forma más fácil de controlar el acceso por extensión.

Diseño en curso del nuevo menú de extensiones
Diseño en curso para el nuevo menú de extensiones

El nuevo menú (que se muestra con el diseño actual, que puede cambiar) muestra con mayor claridad qué extensiones se pueden ejecutar en una página y les permite a los usuarios cambiar el acceso si así lo desean. Un usuario también puede impedir que se ejecuten todas las extensiones en un sitio específico. Como se mencionó, no cambiará ninguno de los parámetros de configuración disponibles o predeterminados. Nos enfocamos en facilitar que los usuarios descubran lo que ya tenemos.

Agrega una solicitud de acceso al sitio

Diseñamos una nueva API para complementar estos cambios, con aportes significativos de otros navegadores y desarrolladores del grupo comunitario de WebExtensions.

Si un usuario retuvo el acceso a una página, las extensiones ahora pueden solicitar acceso con la nueva API de permissions.addSiteAccessRequest. Cuando una extensión hace esto, el usuario verá un mensaje "Permitir" junto a la pieza del rompecabezas de la extensión en la barra de herramientas. Este es un diseño que estamos explorando:

Una solicitud de acceso al sitio en ejemplo.com
Una solicitud de acceso al sitio en example.com

Cuando un usuario hace clic en "Permitir" en el menú de extensiones, se le otorga acceso persistente al host. El usuario puede volver a retenerlo en el futuro si accede al menú de extensiones o a la página chrome://extensions. Hacer clic en "¿Permitir 1?" en la barra de herramientas proporciona una forma más rápida de otorgar acceso inmediato.

Las extensiones pueden llamar a permissions.addSiteAccessRequest con un tabId para mostrar una solicitud de permiso para esa pestaña. Puedes usar la detección de funciones para comenzar a usarla de forma segura en tu extensión hoy mismo. La API no hará nada para los usuarios que no tengan el nuevo menú, pero adoptarla beneficiará a los usuarios que sí lo tengan a medida que se lance gradualmente.

chrome.tabs.onUpdated.addListener(async (tabId, changes) => {
  if (typeof changes.url !== 'string') return;

  const url = new URL(changes.url);

  // If we are on the /checkout page of example.com.
  if (url.origin === 'https://example.com' && url.pathname === '/checkout') {
    const hasPermission = await chrome.permissions.contains({
      origins: ['https://example.com/*']
    });

    // We already have host permissions.
    if (hasPermission) {
      return;
    }

    // Add a site access request if the API is available.
    if (chrome.permissions.addSiteAccessRequest) {
      chrome.permissions.addSiteAccessRequest({ tabId });
    }
  }
});

En este ejemplo, solo agregamos una solicitud si el usuario está en la página /checkout. Puedes ver el código completo en nuestro repositorio chrome-extensions-samples.

Las extensiones deben tener en cuenta cuándo solicitar acceso a los usuarios. Es más probable que los usuarios ignoren las solicitudes con mucho tráfico, y Chrome podría reducir las solicitudes excesivas. Los usuarios también pueden desactivar la capacidad de una extensión para mostrar solicitudes. Como resultado, solo debes solicitar acceso en situaciones específicas, cuando tengas una alta confianza de que el usuario querrá interactuar con tu extensión.

Las solicitudes están vinculadas a una pestaña específica y se borran automáticamente cuando un usuario navega a un origen diferente. Hay un método removeSiteAccessRequest correspondiente disponible para borrar una solicitud de forma explícita (por ejemplo, si una solicitud está vinculada a una ruta de acceso en particular).

Dado que esta API está vinculada con el nuevo menú de extensiones, se ignorarán las llamadas si no se habilita el nuevo menú. Sin embargo, te recomendamos que pruebes la API hoy mismo y que consideres adoptarla en tu extensión. Proporcionarás una excelente experiencia del usuario a medida que los cambios del nuevo menú se muestren gradualmente para más usuarios.

Para obtener más información sobre cómo trabajar con permisos opcionales, consulta la documentación sobre permisos.

Probar

La API está habilitada de forma predeterminada en Chrome 133.0.6838.0 y versiones posteriores (actualmente, en Chrome Canary). Para habilitar el nuevo menú, en chrome://flags, habilita la marca "Extensions Menu Access Control".

Recuerda que esta función aún está en desarrollo y puede seguir evolucionando y cambiando. Te recomendamos que realices pruebas en Chrome Canary para ver la experiencia más actualizada.

Puedes dejar comentarios sobre el nuevo diseño en la lista de distribución chromium-extensions, que tendremos en cuenta mientras seguimos trabajando en el nuevo menú.