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'extensions, les développeurs peuvent utiliser l'API chrome.offscreen et l'autorisation de fichier manifeste à partir de Chrome 109. Demander cette autorisation permet de créer des documents hors écran pour utiliser les API DOM sans ouvrir de manière intrusive de nouvelles fenêtres ou 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 des service workers, mais ceux-ci ne prennent pas en charge les mêmes API et mécanismes que les pages basées sur des documents complets (qui incluent les pages en arrière-plan et les pages d'événements). De plus, l'utilisation de scripts de contenu pour accéder aux API DOM sur les pages Web laisse l'extension à la merci de différentes règles de sécurité des contenus, page par page. Pour résoudre ce problème, nous lançons les documents hors écran afin de prendre en charge les fonctionnalités et les API liées au DOM. Les extensions du fichier manifeste V3 peuvent ainsi ouvrir des documents hors écran minimaux, limités et relativement non autorisés au moment de l'exécution via une API dédiée.

Informations sur les fonctionnalités

Étant donné que les documents hors écran sont spécifiquement conçus pour gérer les cas d'utilisation non pris en charge par 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 de durée de vie semblable à celui des pages d'événements dans le fichier manifeste V2, en ce sens qu'elle sera détruite lorsqu'elle cessera d'effectuer des actions. En outre, l'agent utilisateur peut imposer 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 accessibles uniquement aux API DOM. Par conséquent, les API d'extension n'ont pas besoin d'être exposées directement dans ce contexte. Pour réduire la probabilité que les extensions les utilisent comme "remplacement de 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 l'extraction de site, nécessitent l'accès à des cadres multi-origines, nous autorisons ces documents à intégrer des cadres multi-origines en suivant les mêmes règles que les pages d'extension actuelles. Dans les documents hors écran, les scripts de contenu spécifiés par l'extension peuvent s'exécuter dans ces cadres afin d'extraire tout contenu nécessaire, comme ils le feraient pour n'importe quelle page Web normale.

Motifs et utilité

La création d'un document hors écran nécessite de préciser les raisons 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, les règles appliquées à la durée de vie d'un document ouvert pour la lecture audio sont actuellement différentes de celles appliquées à un document ouvert pour la gestion du presse-papiers. Vous pouvez également ajouter des informations supplémentaires sur l'objectif du document hors écran dans la justification, qui est une chaîne écrite par le développeur et non 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'est compatible qu'avec une seule page par extension et par profil à la fois. Dans les versions ultérieures, nous pourrons assouplir cette règle pour prendre en charge plusieurs pages. Actuellement, si l'extension s'exécute en mode fractionné avec un profil de navigation privée actif, les profils normal et de navigation privée peuvent chacun avoir un document hors écran. Il est également prévu de fournir au worker d'extension des fonctionnalités DOM à un stade ultérieur. Vous pouvez préparer vos extensions à l'avenir en associant les fonctions qui utilisent l'API hors écran à une fonction commentée équivalente dans le service worker pour les remplacer ultérieurement.

// 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 et des API DOM sont ajoutées au service worker, la liste des raisons de créer un document est modifiée en fonction de l'état actuel du service worker et des raisons d'utiliser des documents hors écran.

Conclusion

Les documents hors écran permettent aux extensions qui nécessitent un accès DOM ou à l'interaction de fenêtre, ce qui n'est pas possible actuellement dans les services workers. Il offre également une approche flexible, qui permet d'ajouter de nouveaux cas d'utilisation et de supprimer ceux qui seront résolus à l'avenir. Les extensions doivent utiliser l'API de document hors écran proposée pour des cas d'utilisation spécifiques. Le contexte d'arrière-plan principal de l'extension doit rester le service worker spécifié dans le fichier manifeste. Le document hors écran ne doit pas être l'endroit où stocker la logique d'extension principale, car il dispose d'un accès limité à l'API. La durée de vie d'un document hors écran est indépendante du service worker qui l'a créé. Les considérations sur la durée de vie des services workers et les cas d'utilisation associés seront abordés dans un article de blog distinct. Les raisons d'utiliser des documents hors écran fluctueront au fil du temps, à mesure que des fonctionnalités et des API seront ajoutées au service worker lui-même. Nous avons hâte de connaître l'avis des développeurs à ce sujet.

Photo de Kari Shea sur Unsplash