Fichier manifeste – Ressources accessibles sur le Web

Les ressources accessibles sur le Web sont des fichiers inclus dans une extension accessible depuis les pages Web ou d'autres extensions. Les extensions utilisent généralement cette fonctionnalité pour afficher des images ou d'autres éléments qui doivent être chargés dans des pages Web, mais tout élément inclus dans le bundle d'une extension peut être rendu accessible sur le Web.

Par défaut, aucune ressource n'est accessible via le Web. Cela permet à un site Web malveillant d'empreinte des extensions installées par un utilisateur ou d'exploiter des failles (par exemple, des bugs XSS) dans les extensions installées. Seuls les pages ou les scripts chargés à partir de l'origine d'une extension peuvent accéder aux ressources de cette extension.

Déclaration du fichier manifeste

Utilisez la propriété de fichier manifeste web_accessible_resources pour déclarer les ressources exposées et leurs origines. Cette propriété est un tableau d'objets qui déclare les règles d'accès aux ressources. Chaque objet répertorie un certain nombre de ressources d'extension et doit fournir une valeur pour au moins l'une des clés matches ou extension_ids afin d'indiquer les origines qui peuvent accéder à ces ressources.

{
  ...
  "web_accessible_resources": [
    {
      "resources": [ "test1.png", "test2.png" ],
      "matches": [ "https://web-accessible-resources-1.glitch.me/*" ]
    }, {
      "resources": [ "test3.png", "test4.png" ],
      "matches": [ "https://web-accessible-resources-2.glitch.me/*" ]
    }
  ],
  ...
}

Chaque objet du tableau contient les éléments suivants:

"resources"
Tableau de chaînes, chacune contenant un chemin d'accès relatif à une ressource donnée à partir du répertoire racine de l'extension. Les ressources peuvent contenir des astérisques (*) pour les correspondances avec des caractères génériques. Par exemple, "/images/*" expose de manière récursive tout le contenu du répertoire images/ de l'extension, tandis que "*.png" expose tous les fichiers PNG.
"matches"
Tableau de chaînes, chacune contenant un modèle de correspondance qui spécifie les sites autorisés à accéder à cet ensemble de ressources. Seule l'origine est utilisée pour établir une correspondance avec les URL. Les origines incluent la correspondance des sous-domaines. Google Chrome émet une erreur de type "Format de correspondance non valide" si le chemin d'accès du format n'est pas "/".
"extension_ids"
Tableau de chaînes, chacune contenant l'ID d'une extension pouvant accéder aux ressources.

Chaque élément doit inclure un élément "resources", ainsi qu'un élément "matches" ou "extension_ids". Cela établit un mappage qui expose les ressources spécifiées aux pages Web correspondant au format ou aux extensions dont les ID correspondent.

Les ressources sont disponibles dans une page Web à l'aide de l'URL chrome-extension://[PACKAGE ID]/[PATH], qui peut être générée avec la méthode runtime.getURL(). Les ressources sont diffusées avec les en-têtes CORS appropriés. Elles sont donc disponibles à l'aide de fetch().

La navigation depuis une origine Web vers une ressource d'extension est bloquée, sauf si la ressource est répertoriée comme accessible sur le Web. Prenez note des cas suivants:

  • Lorsqu'une extension utilise l'API webRequest pour rediriger une requête de ressource publique vers une ressource non accessible via le Web, une telle requête est également bloquée.
  • Les redirections à partir de ressources publiques sont bloquées, même si la ressource qui n'est pas accessible via le Web appartient à l'extension de redirection.
  • La navigation est bloquée en mode navigation privée, sauf si la valeur du champ "incognito" est définie sur "split".

Les scripts de contenu eux-mêmes n'ont pas besoin d'être autorisés.

Exemple

L'exemple de ressources accessibles sur le Web illustre l'utilisation de cet élément dans une extension fonctionnelle.