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 certain format d'URL. Les extensions permettent également d'injecter des scripts de contenu par programmation. Pour en savoir plus, consultez la section Injecter des scripts.
Fichier manifeste
Voici les clés compatibles avec "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 située dans le répertoire racine de l'extension. Les barres obliques au début (/
) sont automatiquement coupées. La clé "run_at"
spécifie le moment où chaque fichier sera injecté.
"css"
: tableau- Facultatif. Tableau de chemins de fichiers CSS, injectés dans l'ordre de ce tableau, avant toute construction DOM ou affichage de la page.
"js"
: tableau,- Facultatif. Tableau de chemins de 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 correspondre à un chemin d'accès relatif vers une ressource située dans le 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 touche "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 en savoir plus sur 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 en savoir plus sur la syntaxe.
"include_globs"
: tableau- Facultatif. Appliqué après les correspondances pour n'inclure que les URL qui correspondent également à ce globe. Destiné à émuler le mot clé @include Greasemonkey
"exclude_globs"
: tableau- Facultatif. Appliqué après les correspondances pour exclure les URL qui correspondent à ce schéma glob. Destiné à émuler le mot clé @excluded Greasemonkey.
Les URL Glob sont celles qui contiennent des caractères génériques. * et de 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 unique.
Le script de contenu est injecté dans une page si:
- Son URL correspond à tous les formats
"matches"
et"include_globs"
. - Par ailleurs, l'URL ne correspond pas aux formats
"exclude_matches"
ou"exclude_globs"
.
Globs et exemples de correspondance 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 de l'URL spécifiées. Si elle est définie sur false
, elle n'est injectée que dans le cadre supérieur. Il peut être utilisé avec "match_about_blank"
pour injecter dans un frame about:blank
.
Pour injecter dans d'autres frames comme data:
, blob:
et filesystem:
, définissez "match_origin_as_fallback"
sur true
. Pour en savoir plus, consultez Injecter dans les frames associés
- Valeur booléenne
"all_frames"
- Facultatif. La valeur par défaut est
false
, ce qui signifie que seule le cadre supérieur correspond. Si cette règle est définie sur "true", elle est injectée dans tous les cadres, même s'ils ne sont pas en haut de l'onglet. Les exigences concernant les URL sont vérifiées indépendamment pour chaque frame. Si les exigences de l'URL ne sont pas remplies, les frames enfants ne sont pas injectés. "match_about_blank"
(booléen)- Facultatif. La valeur par défaut est
false
. Indique si le script doit injecter 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 dans des frames qui ont été créés par une origine correspondante, mais dont l'URL ou l'origine ne correspondent peut-être pas directement au format. Ceux-ci incluent des cadres avec des schémas différents, tels queabout:
,data:
,blob:
etfilesystem:
.
Temps d'exécution et environnement d'exécution
Par défaut, les scripts de contenu sont injectés une fois le chargement du document et de toutes les ressources terminé, et sont exécutés dans un environnement d'exécution privé et isolé, auquel la page ou d'autres extensions n'ont pas accès. Vous pouvez modifier ces valeurs par défaut dans les touches suivantes:
"run_at"
–document_start
|document_end
|document_idle
- Facultatif. Indique à quel moment le script doit être injecté dans la page. Elle correspond aux états de chargement de Document.readyState:
<ph type="x-smartling-placeholder">
- </ph>
"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. L'univers JavaScript dans lequel un script doit s'exécuter. La valeur par défaut est
"ISOLATED"
, qui correspond à l'environnement d'exécution unique au script de contenu. Si vous choisissez 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 Travailler dans des mondes 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.