Fichier manifeste – Ressources accessibles sur le Web

Les ressources accessibles sur le Web sont des fichiers situés dans une extension qui peut être consultée par des pages Web ou d'autres . Les extensions utilisent généralement cette fonctionnalité pour exposer des images ou d'autres éléments qui doivent être chargés dans des pages Web, mais tous les éléments inclus dans le bundle d'une extension peuvent être rendus accessibles sur le Web.

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

Déclaration du fichier manifeste

Utilisez la propriété du fichier manifeste web_accessible_resources pour déclarer les ressources exposées et les quelles origines. Cette propriété est un tableau d'objets qui déclare les règles d'accès aux ressources. Chaque objet met en correspondance un tableau de ressources d'extension avec un tableau d'URL et/ou d'ID d'extension pouvant 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/*" ],
      "use_dynamic_url": true
    }
  ],
  ...
}

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 tout le contenu du répertoire images/ de l'extension de manière récursive, tandis que "*.png" expose tous les fichiers PNG.
"matches"
Tableau de chaînes, chacune contenant un modèle de correspondance indiquant les sites autorisés à accéder à cet ensemble de ressources. Seule l'origine est utilisée pour faire correspondre les URL. Les origines incluent la correspondance des sous-domaines. Google Chrome émet un "Format de correspondance non valide" s'affiche 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.
"use_dynamic_url"
Si la valeur est "true", n'autorisez l'accès aux ressources que via un ID dynamique. Un ID dynamique est généré par session. Cela signifie qu'il est régénéré lorsque le navigateur redémarre ou que l'extension se recharge.

Chaque élément doit inclure un élément "resources", ainsi qu'un élément "matches" ou "extension_ids". Le mappage établit un mappage qui expose les ressources spécifiées soit à des pages Web correspondant au format, soit à des extensions ayant des ID correspondants. L'élément "use_dynamic_url" est facultatif.

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

Une navigation depuis une origine Web vers une ressource d'extension est bloquée, sauf si la ressource est listée comme accessible sur le Web. Notez les cas particuliers suivants:

  • Lorsqu'une extension utilise l'API webRequest pour rediriger un utilisateur demande de ressource vers une ressource qui n'est pas accessible sur le Web, ce type de requête est également bloqué.
  • Ce qui précède est vrai même si la ressource qui n'est pas accessible sur le Web appartient à la fonction .
  • 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 ne doivent pas être autorisés.

Exemple

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