Fichier manifeste - scripts de contenu

La clé "content_scripts" spécifie un fichier JavaScript ou CSS chargé de manière statique à utiliser chaque fois qu'une page est ouverte et qui correspond à un format d'URL donné. Les extensions permettent également d'injecter des scripts de contenu de manière programmatique. Pour en savoir plus, consultez la section Injecter des scripts.

Manifest

Voici les clés acceptées pour "content_scripts". Seules la clé "matches" et "js" ou "css" sont obligatoires.

manifest.json

{
 "name": "My extension",
 ...
 "content_scripts": [
   {
     "matches": ["https://*.example.com/*"],
     "css": ["my-styles.css"],
     "js": ["content-script.js"],
     "exclude_matches": ["*://*/*foo*"],
     "include_globs": ["*example.com/???s/*"],
     "exclude_globs": ["*bar*"],     
     "all_frames": false,
     "match_origin_as_fallback": false,
     "match_about_blank": false,
     "run_at": "document_idle",
     "world": "ISOLATED",
   }
 ],
 ...
}

Fichiers

Chaque fichier doit contenir un chemin d'accès relatif à une ressource du répertoire racine de l'extension. Les barres obliques au début (/) sont automatiquement coupées. La clé "run_at" indique à quel moment chaque fichier sera injecté.

"css" – Tableau
Facultatif. Tableau des chemins d'accès aux fichiers CSS, injectés dans l'ordre de ce tableau, avant toute construction DOM ou rendu de page.
"js" : tableau,
Facultatif. Tableau de chemins d'accès aux fichiers JavaScript, injectés dans l'ordre dans lequel ils apparaissent dans ce tableau, après l'injection des fichiers CSS. Chaque chaîne du tableau doit être un chemin relatif à une ressource du répertoire racine de l'extension. Les barres obliques au début ("/") sont automatiquement coupées.

Faire correspondre les URL

Seule la propriété "matches" est obligatoire. Vous pouvez ensuite utiliser "exclude_matches", "include_globs" et "exclude_globs" pour personnaliser les URL dans lesquelles injecter du code. La clé "matches" déclenche un avertissement.

"matches" – Tableau
Obligatoire. Spécifie les formats d'URL dans lesquels injecter les scripts de contenu. Consultez la section Formats de correspondance pour connaître la syntaxe.
"exclude_matches" – Tableau
Facultatif. Exclut les formats d'URL dans lesquels injecter les scripts de contenu. Consultez la section Formats de correspondance pour connaître la syntaxe.
"include_globs" – Tableau
Facultatif. Appliqué après les correspondances pour inclure uniquement les URL qui correspondent également à ce glob. Destiné à émuler le mot clé Greasemonkey @include.
"exclude_globs" – Tableau
Facultatif. Appliqué après les correspondances pour exclure les URL qui correspondent à ce glob. Destiné à émuler le mot clé Greasemonkey @excluded.

Les URL Glob sont celles qui contiennent des "caractères génériques" * et des points d'interrogation. Le caractère générique * correspond à n'importe quelle chaîne de n'importe quelle longueur, y compris une chaîne vide, tandis que le point d'interrogation ? correspond à n'importe quel caractère.

Le script de contenu est injecté dans une page si:

  • Son URL correspond à tous les formats "matches" et "include_globs".
  • De plus, l'URL ne correspond pas aux formats "exclude_matches" ou "exclude_globs".

Exemples de schémas et d'URL

"include_globs"

manifest.json

{
  ...
  "content_scripts": [
    {
      "matches": ["https://*.example.com/*"],
      "include_globs": ["https://???.example.com/foo/*"],
      "js": ["content-script.js"]
    }
  ],
  ...
}
Correspond à
https://www.example.com/foo/bar
https://the.example.com/foo/
Ne correspond pas
https://my.example.com/foo/bar
https://example.com/foo/*
https://www.example.com/foo

manifest.json

{
  ...
  "content_scripts": [
    {
      "matches": ["https://*.example.com/*"],
      "include_globs": ["*example.com/???s/*"],
      "js": ["content-script.js"]
    }
  ],
  ...
}
Correspond à
https://www.example.com/arts/index.html
https://www.example.com/jobs/index.html
Ne correspond pas
https://www.example.com/sports/index.html
https://www.example.com/music/index.html

"exclude_globs"

manifest.json

{
  ...
  "content_scripts": [
    {
      "matches": ["https://*.example.com/*"],
      "exclude_globs": ["*science*"],
      "js": ["content-script.js"]
    }
  ],
  ...
}
Correspond à
https://history.example.com
https://.example.com/music
Ne correspond pas
https://science.example.com
https://www.example.com/science

Exemple de personnalisation avancée

manifest.json

{
  ...
  "content_scripts": [
    {
      "matches": ["https://*.example.com/*"],
      "exclude_matches": ["*://*/*business*"],
      "include_globs": ["*example.com/???s/*"],
      "exclude_globs": ["*science*"],
      "js": ["content-script.js"]
    }
  ],
  ...
}
Correspond à
https://www.example.com/arts/index.html
https://.example.com/jobs/index.html
Ne correspond pas
https://science.example.com
https://www.example.com/jobs/business
https://www.example.com/science

Images

La clé "all_frames" indique si le script de contenu doit être injecté dans tous les frames correspondant aux exigences d'URL spécifiées. Si elle est définie sur false, l'injection n'est effectuée que dans le cadre supérieur. Il peut être utilisé avec "match_about_blank" pour l'injecter dans un frame about:blank.

Pour effectuer une injection dans d'autres frames comme data:, blob: et filesystem:, définissez "match_origin_as_fallback" sur true. Pour en savoir plus, consultez Injecter dans des cadres associés.

"all_frames" Booléen
Facultatif. La valeur par défaut est false, ce qui signifie que seul le cadre supérieur est mis en correspondance. Si cette règle est définie sur "True", elle est injectée dans tous les frames, même s'ils ne sont pas ceux du haut de l'onglet. Chaque frame est vérifié indépendamment pour les exigences d'URL. Il ne sera pas injecté dans les frames enfants si les exigences d'URL ne sont pas remplies.
"match_about_blank" – Booléen
Facultatif. La valeur par défaut est false. Indique si le script doit être injecté dans un frame about:blank où l'URL parente correspond à l'un des formats déclarés dans "matches".
"match_origin_as_fallback" – Booléen
Facultatif. La valeur par défaut est false. Indique si le script doit injecter des frames qui ont été créés par une origine correspondante, mais dont l'URL ou l'origine peuvent ne pas correspondre directement au format. Ceux-ci incluent des cadres avec différents schémas, tels que about:, data:, blob: et filesystem:.

Exécution et environnement d'exécution

Par défaut, les scripts de contenu sont injectés lorsque le chargement du document et de toutes les ressources est terminé. Ils sont exécutés dans un environnement d'exécution privé et isolé qui n'est pas accessible par la page ni par les autres extensions. Vous pouvez modifier ces valeurs par défaut dans les clés suivantes:

"run_at"document_start | document_end | document_idle
Facultatif. Indique à quel moment le script doit être injecté dans la page. Il correspond aux états de chargement de Document.readyState :
  • "document_start": le DOM est toujours en cours de chargement.
  • "document_end": les ressources de la page sont toujours en cours de chargement
  • "document_idle": le chargement du DOM et des ressources est terminé. Il s'agit de la valeur par défaut.
"world"ISOLATED | MAIN
Facultatif. Monde JavaScript dans lequel un script doit s'exécuter. La valeur par défaut est "ISOLATED", qui est l'environnement d'exécution propre au script de contenu. Si vous sélectionnez l'environnement "MAIN", le script partagera l'environnement d'exécution avec le code JavaScript de la page hôte. Pour en savoir plus, consultez la page Travailler dans des environnements isolés.

Exemple

Consultez le tutoriel Exécuter sur chaque page pour créer une extension qui injecte un script de contenu dans le fichier manifeste.