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"]
}
],
...
}
https://www.example.com/foo/bar https://the.example.com/foo/
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"]
}
],
...
}
https://www.example.com/arts/index.html https://www.example.com/jobs/index.html
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"]
}
],
...
}
https://history.example.com https://.example.com/music
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"]
}
],
...
}
https://www.example.com/arts/index.html https://.example.com/jobs/index.html
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 frameabout: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 queabout:
,data:
,blob:
etfilesystem:
.
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.