Documentos fuera de pantalla en Manifest V3

Ian Stanion
Ian Stanion

Para reemplazar la funcionalidad en la transición de las páginas en segundo plano a los service workers de extensiones, los desarrolladores pueden usar la API de chrome.offscreen y el permiso de manifiesto a partir de Chrome 109. Solicitar este permiso permite crear documentos fuera de la pantalla para usar las APIs de DOM sin abrir ventanas o pestañas nuevas de forma invasiva que interrumpan la experiencia del usuario. La API de chrome.offscreen ahora está disponible en las extensiones de Chrome.

En Chromium, las extensiones de Manifest V3 se basan en service workers, pero estos no admiten las mismas APIs y mecanismos que las páginas basadas en documentos completos (que incluyen páginas en segundo plano y de eventos). Además, el uso de secuencias de comandos de contenido para acceder a las APIs de DOM en páginas web deja a la extensión a merced de diferentes políticas de seguridad del contenido en cada página. Para ayudar a resolver este problema, presentamos los documentos fuera de pantalla para admitir funciones y APIs relacionadas con el DOM, lo que permite que las extensiones de manifiesto V3 abran documentos fuera de pantalla mínimos, centrados y sin permisos durante el tiempo de ejecución a través de una API dedicada.

Información sobre la función

Dado que los documentos fuera de pantalla están diseñados específicamente para controlar casos de uso que no son compatibles con los trabajadores del servicio (por ejemplo, la reproducción de audio), la vida útil de esta página y los permisos que se le otorgarán son independientes de los del trabajador del servicio de la extensión. La página tendrá un mecanismo de vida útil similar al de las páginas de eventos en el manifiesto V2, ya que se eliminará cuando deje de realizar acciones. Además, el usuario-agente puede establecer más restricciones en la duración específica del propósito especificado. Los documentos fuera de pantalla están diseñados para llenar los vacíos de las APIs a las que solo pueden acceder las APIs de DOM. Por este motivo, las APIs de extensión no necesitan exponerse directamente en este contexto. Para reducir la probabilidad de que las extensiones los usen como un "reemplazo de página en segundo plano", solo las APIs de mensajería de chrome.runtime están expuestas al documento fuera de la pantalla. (Los desarrolladores también pueden usar los mensajes web si reclaman el documento fuera de la pantalla como un cliente a través de su trabajador de servicio). Debido a que algunos casos de uso, en particular, el rastreo de sitios, requieren acceso a marcos de origen cruzado, permitimos que estos documentos incorporen marcos de origen cruzado siguiendo las mismas reglas que tienen actualmente las páginas de extensión. En los documentos fuera de la pantalla, las secuencias de comandos de contenido que especifica la extensión se pueden ejecutar en estos marcos para extraer el contenido necesario, como lo harían en cualquier página web normal.

Motivos y necesidad de un propósito

Para crear un documento fuera de pantalla, se deben indicar los motivos y proporcionar una justificación adicional. Estos motivos se enumeran en la documentación de referencia de la API y controlan la vida útil del documento de diferentes maneras. Por ejemplo, un documento abierto para la reproducción de audio actualmente tiene reglas diferentes aplicadas a su ciclo de vida que un documento abierto para la administración del portapapeles. También puedes agregar más detalles sobre el propósito del documento fuera de la pantalla en la justificación, que es una cadena escrita por el desarrollador y no un parámetro con efectos en el documento. Es posible que se agreguen más motivos a la API con el tiempo a medida que los desarrolladores compartan sus comentarios y casos de uso.

Hacia el futuro

Para facilitar la implementación, la primera versión de esta API solo admite una página por extensión y por perfil a la vez. En versiones futuras, es posible que relajemos esta restricción para admitir varias páginas. Actualmente, si la extensión se ejecuta en modo dividido con un perfil de Incógnito activo, tanto el perfil normal como el de Incógnito pueden tener un documento fuera de pantalla. También se planea otorgarle la funcionalidad de DOM al trabajador de extensión más adelante. Puedes preparar tus extensiones para el futuro vinculando funciones que usan la API fuera de la pantalla con una función comentada equivalente en el trabajador de servicio para intercambiarlas más adelante.

// Solution 1 - Service workers cannot directly interact with
// the system clipboard. To work around this, we'll create an offscreen
// document and pass the data we want to write to the clipboard.
async function addToClipboard(value) {
    await chrome.offscreen.createDocument({
      url: 'offscreen.html',
      reasons: [chrome.offscreen.Reason.CLIPBOARD],
      justification: 'Write text to the clipboard.',
    });
  }


// Solution 2 – Once extension service workers can use the Clipboard API,
// replace the offscreen document based implementation with something like this
async function addToClipboardV2(value) {
  navigator.clipboard.writeText(value);
}

Además, a medida que se agregan las APIs y la funcionalidad de DOM al trabajador de servicio, la lista de motivos para crear un documento se agregará o reducirá según el estado actual del trabajador de servicio y los motivos para usar documentos fuera de la pantalla.

Conclusión

Los documentos fuera de la pantalla permiten extensiones que requieren acceso a la interacción de DOM o ventana que no se puede lograr en los trabajadores del servicio en la actualidad. También proporciona un enfoque flexible, en el que se pueden agregar casos de uso nuevos y quitar los casos de uso resueltos en el futuro. Las extensiones deben emplear la API de documentos fuera de pantalla propuesta para casos de uso específicos, y el contexto en segundo plano principal de la extensión debe seguir siendo el trabajador de servicio especificado en el manifiesto. El documento fuera de la pantalla no debe ser el lugar para almacenar la lógica principal de la extensión, ya que tiene acceso limitado a la API. La vida útil de un documento fuera de pantalla es independiente del service worker que lo creó. En una entrada de blog independiente, se abordarán las consideraciones y los casos de uso relacionados con la vida útil de los trabajadores del servicio en las extensiones. Los motivos para usar documentos fuera de la pantalla fluctuarán con el tiempo a medida que se agreguen funciones y APIs al propio trabajador de servicio. Estamos ansiosos por escuchar los comentarios de los desarrolladores a medida que se desarrolla.

Foto de Kari Shea en Unsplash