Documents hors écran dans Manifest V3

Ian Stanion
Ian Stanion

Pour remplacer les fonctionnalités lors de la transition des pages en arrière-plan vers les service workers d'extension, les développeurs peuvent utiliser l'API chrome.offscreen et l'autorisation du fichier manifeste à partir de Chrome 109. La demande de cette autorisation permet de créer des documents hors écran afin d'utiliser les API DOM sans ouvrir de nouvelles fenêtres ou de nouveaux onglets qui interrompent l'expérience utilisateur. L'API chrome.offscreen est désormais disponible dans les extensions Chrome.

Dans Chromium, les extensions Manifest V3 sont basées sur les service workers, mais les service workers ne prennent pas en charge les mêmes API et mécanismes que les pages complètes basées sur des documents (qui incluent des pages d'arrière-plan et d'événements). De plus, l'utilisation de scripts de contenu pour accéder aux API DOM sur des pages Web laisse l'extension au mérite de différentes règles de sécurité du contenu page par page. Pour résoudre ce problème, nous lançons les documents hors écran, qui prennent en charge les fonctionnalités et API liées au DOM en permettant aux extensions Manifest V3 d'ouvrir des documents hors écran minimaux, limités et relativement non autorisés lors de l'exécution via une API dédiée.

Informations sur la fonctionnalité

Étant donné que les documents hors écran sont spécialement conçus pour gérer les cas d'utilisation qui ne sont pas compatibles avec les service workers (par exemple, la lecture audio), la durée de vie de cette page et les autorisations qui lui seront accordées sont distinctes de celles du service worker de l'extension. La page aura un mécanisme à durée de vie semblable à celui des pages d'événement dans Manifest V2, dans la mesure où elle sera supprimée lorsqu'elle cessera d'effectuer des actions. En outre, le user-agent peut appliquer d'autres restrictions sur la durée de vie spécifique à l'objectif spécifié. Les documents hors écran sont conçus pour combler les lacunes des API qui ne sont accessibles qu'aux API DOM. De ce fait, les API d'extension n'ont pas besoin d'être exposées directement dans ce contexte. Pour réduire la probabilité que des extensions les utilisent pour remplacer la page en arrière-plan, seules les API de messagerie chrome.runtime sont exposées au document hors écran. (Les développeurs peuvent également utiliser la messagerie Web en revendiquant le document hors écran en tant que Client via leur service worker.) Étant donné que certains cas d'utilisation (en particulier le scraping de sites) nécessitent un accès à des frames multi-origines, nous autorisons l'intégration de frames multi-origines par ces documents en respectant les mêmes règles que celles appliquées aux pages d'extension aujourd'hui. Dans les documents hors écran, les scripts de contenu spécifiés par l'extension peuvent s'exécuter dans ces frames afin de détourner tout contenu nécessaire, comme ils le feraient pour n'importe quelle page Web normale.

Raisons et exiger un objectif

La création d'un document hors écran nécessite d'énoncer les motifs de la décision et de fournir une justification supplémentaire. Ces raisons sont listées dans la documentation de référence de l'API et gèrent la durée de vie du document de différentes manières. Par exemple, un document ouvert pour la lecture audio est actuellement soumis à des règles de durée de vie différentes de celles d'un document ouvert pour la gestion du presse-papiers. Vous pouvez également ajouter des détails sur l'objectif du document hors écran dans la justification. Il s'agit d'une chaîne écrite par le développeur et non d'un paramètre ayant des effets sur le document. D'autres raisons peuvent être ajoutées à l'API au fil du temps, à mesure que les développeurs partagent leurs commentaires et leurs cas d'utilisation.

Et demain ?

Pour faciliter l'implémentation, la première version de cette API n'accepte qu'une seule page à la fois par extension et par profil. Dans les prochaines versions, nous pourrons l'assouplir afin d'accepter plusieurs pages. Actuellement, si l'extension est exécutée en mode fractionné avec un profil de navigation privée actif, les profils normal et de navigation privée peuvent chacun comporter un document hors écran. Il est également prévu que la fonctionnalité DOM des nœuds de calcul de l'extension soit disponible ultérieurement. Vous pouvez "pérenniser" vos extensions en associant des fonctions qui utilisent l'API hors écran à une fonction commentée équivalente dans le service worker pour un échange ultérieur.

// 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);
}

De plus, à mesure que des fonctionnalités DOM et des API sont ajoutées au service worker, la liste des motifs de création d'un document est réduite ou ajoutée en fonction de l'état actuel du service worker et des raisons d'utiliser des documents hors écran.

Conclusion

Les documents hors écran autorisent les extensions qui nécessitent un accès DOM ou une interaction entre les fenêtres, qui ne peut pas être obtenu par les service workers pour le moment. Il offre également une approche flexible, dans laquelle de nouveaux cas d'utilisation peuvent être ajoutés et les cas d'utilisation résolus à l'avenir peuvent être supprimés. Les extensions doivent utiliser l'API de document hors écran proposée pour des cas d'utilisation spécifiques, et le contexte principal de l'extension doit rester le service worker indiqué dans le fichier manifeste. Le document hors écran ne doit pas être l'endroit où stocker la logique de l'extension principale, car il dispose d'un accès limité aux API. La durée de vie d'un document hors écran est indépendante du service worker qui l'a créé. Les considérations relatives à la durée de vie des service workers et les cas d'utilisation liés à cette durée dans les extensions seront traités dans un autre article de blog. Les raisons d'utiliser des documents hors écran varient au fil du temps, à mesure que des fonctionnalités et des API sont ajoutées au service worker lui-même. N'hésitez pas à nous faire part de vos commentaires au fur et à mesure de l'évolution de la situation.

Photo de Kari Shea sur Unsplash