Description
Utilisez l'API userScripts
pour exécuter des scripts utilisateur dans le contexte de scripts utilisateur.
Autorisations
userScripts
Pour utiliser l'API chrome.userScripts
, ajoutez l'autorisation "userScripts"
à votre fichier manifest.json et "host_permissions"
pour les sites sur lesquels vous souhaitez exécuter des scripts.
{
"name": "User script test extension",
"manifest_version": 3,
"minimum_chrome_version": "120",
"permissions": [
"userScripts"
],
"host_permissions": [
"*://example.com/*"
]
}
Disponibilité
Concepts et utilisation
Un script utilisateur est un extrait de code injecté dans une page Web pour modifier son apparence ou son comportement. Les scripts sont créés par les utilisateurs, ou téléchargés à partir d'un dépôt de scripts ou d'une extension de script utilisateur.
Mode développeur pour les utilisateurs d'extensions
En tant que développeur d'extensions, le mode développeur est déjà activé dans votre installation de Chrome. Pour les extensions basées sur des scripts, vos utilisateurs doivent également activer le mode développeur. Voici des instructions que vous pouvez copier et coller dans votre propre documentation.
- Accédez à la page "Extensions" en saisissant
chrome://extensions
dans un nouvel onglet. Les URLchrome://
ne peuvent pas être associées de par leur conception. Activez le mode développeur en cliquant sur le bouton bascule à côté de Mode développeur.
Vous pouvez déterminer si le mode développeur est activé en vérifiant si chrome.userScripts
génère une erreur. Exemple :
function isUserScriptsAvailable() {
try {
// Property access which throws if developer mode is not enabled.
chrome.userScripts;
return true;
} catch {
// Not available.
return false;
}
}
Travailler dans des mondes isolés
Les scripts utilisateur et de contenu peuvent s'exécuter dans un monde isolé ou dans le monde principal. Un monde isolé est un environnement d'exécution qui n'est pas accessible à une page hôte ni à d'autres extensions. Cela permet à un script utilisateur de modifier son environnement JavaScript sans affecter la page hôte ni les autres extensions scripts utilisateur et de contenu. À l'inverse, les scripts utilisateur (et les scripts de contenu) ne sont pas visibles par la page hôte ni par l'utilisateur et les scripts de contenu des autres extensions. Les scripts exécutés dans le monde principal sont accessibles aux pages hôtes et à d'autres extensions, et sont visibles par les pages hôtes et par d'autres extensions. Pour sélectionner le monde, transmettez "USER_SCRIPT"
ou "MAIN"
lorsque vous appelez userScripts.register()
.
Pour configurer une stratégie de sécurité du contenu pour l'environnement USER_SCRIPT
, appelez userScripts.configureWorld()
:
chrome.userScripts.configureWorld({
csp: "script-src 'self'"
});
Messagerie
Comme les scripts de contenu et les documents hors écran, les scripts d'utilisateur communiquent avec d'autres parties d'une extension à l'aide de la messagerie, ce qui signifie qu'ils peuvent appeler runtime.sendMessage()
et runtime.connect()
comme n'importe quelle autre partie d'une extension. Cependant, ils sont reçus à l'aide de gestionnaires d'événements dédiés (autrement dit, ils n'utilisent pas onMessage
ni onConnect
). Ces gestionnaires sont appelés runtime.onUserScriptMessage
et runtime.onUserScriptConnect
. Les gestionnaires dédiés facilitent l'identification des messages à partir des scripts d'utilisateur, qui constituent un contexte moins fiable.
Avant d'envoyer un message, vous devez appeler configureWorld()
avec l'argument messaging
défini sur true
. Notez que les arguments csp
et messaging
peuvent être transmis en même temps.
chrome.userScripts.configureWorld({
messaging: true
});
Mises à jour des extensions
Les scripts utilisateur sont effacés lors des mises à jour d'une extension. Vous pouvez les rajouter en exécutant du code dans le gestionnaire d'événements runtime.onInstalled
du service worker d'extension. Répondez uniquement au motif "update"
transmis au rappel d'événement.
Exemple
Cet exemple provient de l'exemple userScript de notre dépôt d'exemples.
Enregistrer un script
L'exemple suivant illustre un appel de base à register()
. Le premier argument est un tableau d'objets définissant les scripts à enregistrer. Il existe d'autres options que celles présentées ici.
chrome.userScripts.register([{
id: 'test',
matches: ['*://*/*'],
js: [{code: 'alert("Hi!")'}]
}]);
Types
ExecutionWorld
Environnement JavaScript dans lequel un script utilisateur doit s'exécuter.
Énumération
"MAIN"
Spécifie l'environnement d'exécution du DOM, c'est-à-dire l'environnement d'exécution partagé avec le JavaScript de la page hôte.
"USER_SCRIPT"
Spécifie l'environnement d'exécution spécifique aux scripts utilisateur et exempté du CSP de la page.
RegisteredUserScript
Propriétés
-
allFrames
Booléen facultatif
Si la valeur est "true", elle est injectée dans tous les cadres, même s'ils ne sont pas en haut de l'onglet. Les exigences relatives aux URL sont vérifiées indépendamment pour chaque frame. il n'est pas injecté dans les frames enfants si les exigences de l'URL ne sont pas remplies. La valeur par défaut est "false", ce qui signifie que seule l'image du haut correspond.
-
excludeGlobs
string[] facultatif
Spécifie des modèles de caractères génériques pour les pages dans lesquelles ce script utilisateur ne sera PAS injecté.
-
excludeMatches
string[] facultatif
Exclut les pages dans lesquelles ce script utilisateur serait autrement injecté. Consultez la section Formats de correspondance pour en savoir plus sur la syntaxe de ces chaînes.
-
id
chaîne
ID du script utilisateur spécifié dans l'appel d'API. Cette propriété ne doit pas commencer par le caractère "_" car il est réservé comme préfixe pour les ID de script générés.
-
includeGlobs
string[] facultatif
Spécifie les modèles de caractères génériques pour les pages dans lesquelles ce script utilisateur sera injecté.
-
js
Liste des objets ScriptSource définissant les sources des scripts à injecter dans les pages correspondantes.
-
correspond à
string[] facultatif
Spécifie les pages sur lesquelles ce script utilisateur sera injecté. Consultez la section Formats de correspondance pour en savoir plus sur la syntaxe de ces chaînes. Cet établissement doit être spécifié pour ${ref:register}.
-
runAt
RunAt facultatif
Indique à quel moment les fichiers JavaScript sont injectés dans la page Web. La valeur préférée par défaut est
document_idle
. -
monde
ExecutionWorld facultatif
Environnement d'exécution JavaScript dans lequel exécuter le script. La valeur par défaut est
`USER_SCRIPT`
.
ScriptSource
Propriétés
-
code
chaîne facultatif
Chaîne contenant le code JavaScript à injecter. Vous ne devez spécifier qu'une seule propriété
file
oucode
. -
fichier
chaîne facultatif
Chemin du fichier JavaScript à injecter par rapport au répertoire racine de l'extension. Vous ne devez spécifier qu'une seule propriété
file
oucode
.
UserScriptFilter
Propriétés
-
ids
string[] facultatif
getScripts
ne renvoie que les scripts avec les ID spécifiés dans cette liste.
WorldProperties
Propriétés
-
CSS
chaîne facultatif
Spécifie la valeur CSS mondiale. La valeur par défaut est la valeur CSS mondiale
`ISOLATED`
. -
messagerie
Booléen facultatif
Indique si les API de messagerie sont exposées. La valeur par défaut est
false
.
Méthodes
configureWorld()
chrome.userScripts.configureWorld(
properties: WorldProperties,
callback?: function,
)
Configure l'environnement d'exécution `USER_SCRIPT`
.
Paramètres
-
du bucket
Contient la configuration mondiale du script utilisateur.
-
rappel
function facultatif
Le paramètre
callback
se présente comme suit:() => void
Renvoie
-
Promesse<void>
Les promesses sont prises en charge dans Manifest V3 et versions ultérieures, mais les rappels sont fournis pour rétrocompatibilité. Vous ne pouvez pas utiliser les deux sur le même appel de fonction. La la promesse est résolue avec le même type que celui transmis au rappel.
getScripts()
chrome.userScripts.getScripts(
filter?: UserScriptFilter,
callback?: function,
)
Renvoie tous les scripts utilisateur enregistrés dynamiquement pour cette extension.
Paramètres
-
filtre
UserScriptFilter facultatif
Si elle est spécifiée, cette méthode ne renvoie que les scripts utilisateur qui lui correspondent.
-
rappel
function facultatif
Le paramètre
callback
se présente comme suit:(scripts: RegisteredUserScript[]) => void
-
scripts
-
Renvoie
-
Promise<RegisteredUserScript[]>
Les promesses sont prises en charge dans Manifest V3 et versions ultérieures, mais les rappels sont fournis pour rétrocompatibilité. Vous ne pouvez pas utiliser les deux sur le même appel de fonction. La la promesse est résolue avec le même type que celui transmis au rappel.
register()
chrome.userScripts.register(
scripts: RegisteredUserScript[],
callback?: function,
)
Enregistre un ou plusieurs scripts utilisateur pour cette extension.
Paramètres
-
scripts
Contient une liste de scripts utilisateur à enregistrer.
-
rappel
function facultatif
Le paramètre
callback
se présente comme suit:() => void
Renvoie
-
Promesse<void>
Les promesses sont prises en charge dans Manifest V3 et versions ultérieures, mais les rappels sont fournis pour rétrocompatibilité. Vous ne pouvez pas utiliser les deux sur le même appel de fonction. La la promesse est résolue avec le même type que celui transmis au rappel.
unregister()
chrome.userScripts.unregister(
filter?: UserScriptFilter,
callback?: function,
)
Annule l'enregistrement de tous les scripts utilisateur enregistrés dynamiquement pour cette extension.
Paramètres
-
filtre
UserScriptFilter facultatif
Si cette méthode est spécifiée, elle annule l'enregistrement des scripts utilisateur qui lui correspondent.
-
rappel
function facultatif
Le paramètre
callback
se présente comme suit:() => void
Renvoie
-
Promesse<void>
Les promesses sont prises en charge dans Manifest V3 et versions ultérieures, mais les rappels sont fournis pour rétrocompatibilité. Vous ne pouvez pas utiliser les deux sur le même appel de fonction. La la promesse est résolue avec le même type que celui transmis au rappel.
update()
chrome.userScripts.update(
scripts: RegisteredUserScript[],
callback?: function,
)
Met à jour un ou plusieurs scripts utilisateur pour cette extension.
Paramètres
-
scripts
Contient une liste des scripts utilisateur à mettre à jour. Une propriété n'est mise à jour pour le script existant que si elle est spécifiée dans cet objet. Si des erreurs se produisent lors de l'analyse du script ou de la validation du fichier, ou si les ID spécifiés ne correspondent pas à un script entièrement enregistré, aucun script n'est mis à jour.
-
rappel
function facultatif
Le paramètre
callback
se présente comme suit:() => void
Renvoie
-
Promesse<void>
Les promesses sont prises en charge dans Manifest V3 et versions ultérieures, mais les rappels sont fournis pour rétrocompatibilité. Vous ne pouvez pas utiliser les deux sur le même appel de fonction. La la promesse est résolue avec le même type que celui transmis au rappel.