chrome.declarativeContent

Description

Utilisez l'API chrome.declarativeContent pour effectuer des actions en fonction du contenu d'une page, sans avoir besoin d'autorisation pour lire le contenu de la page.

Autorisations

declarativeContent

Concepts et utilisation

L'API Content Declarative vous permet d'activer l'action de votre extension en fonction de l'URL d'une page Web ou si un sélecteur CSS correspond à un élément de la page, sans avoir à ajouter d'autorisations hôte ni à injecter un script de contenu.

Utilisez l'autorisation activeTab pour interagir avec une page après que l'utilisateur a cliqué sur l'action de l'extension.

Règles

Les règles se composent de conditions et d'actions. Si l'une des conditions est remplie, toutes les actions sont exécutées. Les actions sont setIcon() et showAction().

PageStateMatcher correspond aux pages Web si et seulement si tous les critères listés sont remplis. Il peut correspondre à une URL de page, à un sélecteur composé CSS ou à l'état "Ajouté aux favoris" d'une page. La règle suivante active l'action de l'extension sur les pages Google lorsqu'un champ de mot de passe est présent:

let rule1 = {
  conditions: [
    new chrome.declarativeContent.PageStateMatcher({
      pageUrl: { hostSuffix: '.google.com', schemes: ['https'] },
      css: ["input[type='password']"]
    })
  ],
  actions: [ new chrome.declarativeContent.ShowAction() ]
};

Pour activer également l'action de l'extension pour les sites Google contenant une vidéo, vous pouvez ajouter une deuxième condition, car chaque condition est suffisante pour déclencher toutes les actions spécifiées:

let rule2 = {
  conditions: [
    new chrome.declarativeContent.PageStateMatcher({
      pageUrl: { hostSuffix: '.google.com', schemes: ['https'] },
      css: ["input[type='password']"]
    }),
    new chrome.declarativeContent.PageStateMatcher({
      css: ["video"]
    })
  ],
  actions: [ new chrome.declarativeContent.ShowAction() ]
};

L'événement onPageChanged vérifie si une règle comporte au moins une condition remplie et exécute les actions. Les règles persistent entre les sessions de navigation. Par conséquent, lors de l'installation de l'extension, vous devez d'abord utiliser removeRules pour effacer les règles précédemment installées, puis addRules pour en enregistrer de nouvelles.

chrome.runtime.onInstalled.addListener(function(details) {
  chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
    chrome.declarativeContent.onPageChanged.addRules([rule2]);
  });
});

Avec l'autorisation activeTab, votre extension n'affichera aucune alerte d'autorisation. Lorsque l'utilisateur clique sur l'action de l'extension, elle ne s'exécute que sur les pages pertinentes.

Mise en correspondance des URL de page

PageStateMatcher.pageurl correspond lorsque les critères d'URL sont remplis. Les critères les plus courants sont une concatenaison d'hôte, de chemin ou d'URL, suivie de "Contient", "Est égal à", "Préfixe" ou "Suffixe". Vous trouverez quelques exemples dans le tableau suivant:

Critères Correspond à
{ hostSuffix: 'google.com' } Toutes les URL Google
{ pathPrefix: '/docs/extensions' } URL des pages de documentation des extensions
{ urlContains: 'developer.chrome.com' } Toutes les URL de la documentation pour les développeurs Chrome

Tous les critères sont sensibles à la casse. Pour obtenir la liste complète des critères, consultez UrlFilter.

Mise en correspondance CSS

Les conditions PageStateMatcher.css doivent être des sélecteurs composés. Autrement dit, vous ne pouvez pas inclure de combinateurs tels que des espaces blancs ou ">" dans vos sélecteurs. Cela permet à Chrome de faire correspondre les sélecteurs plus efficacement.

Sélecteurs composés (OK) Sélecteurs complexes (non conformes)
a div p
iframe.special[src^='http'] p>span.highlight
ns|* p + ol
#abcd:checked p::first-line

Les conditions CSS ne correspondent qu'aux éléments affichés: si un élément correspondant à votre sélecteur est display:none ou si l'un de ses éléments parents est display:none, la condition ne correspond pas. Les éléments stylisés avec visibility:hidden, positionnés en dehors de l'écran ou masqués par d'autres éléments peuvent toujours faire correspondre votre condition.

Correspondance de l'état "Ajouté aux favoris"

La condition PageStateMatcher.isBookmarked permet de faire correspondre l'état de l'URL actuelle dans le profil de l'utilisateur avec l'état de l'ajout aux favoris. Pour utiliser cette condition, l'autorisation "bookmarks" doit être déclarée dans le manifest de l'extension.

Types

Type

ImageData

PageStateMatcher

Correspond à l'état d'une page Web en fonction de divers critères.

Propriétés

  • constructor

    vide

    La fonction constructor se présente comme suit :

    (arg: PageStateMatcher) => {...}

  • css

    string[] facultatif

    Correspond si tous les sélecteurs CSS du tableau correspondent aux éléments affichés dans un cadre ayant la même origine que le cadre principal de la page. Tous les sélecteurs de ce tableau doivent être des sélecteurs composés pour accélérer la mise en correspondance. Remarque: Lister des centaines de sélecteurs CSS ou des sélecteurs CSS qui correspondent des centaines de fois par page peut ralentir les sites Web.

  • isBookmarked

    booléen facultatif

    Chrome 45 et versions ultérieures

    Correspond si l'état de la page avec signet est égal à la valeur spécifiée. Nécessite l'autorisation de création de favoris.

  • pageUrl

    UrlFilter facultatif

    Correspond si les conditions de l'UrlFilter sont remplies pour l'URL racine de la page.

RequestContentScript

Action d'événement déclarative qui injecte un script de contenu.

ATTENTION:Cette action est encore expérimentale et n'est pas compatible avec les versions stables de Chrome.

Propriétés

  • constructor

    vide

    La fonction constructor se présente comme suit :

    (arg: RequestContentScript) => {...}

  • allFrames

    booléen facultatif

    Indique si le script de contenu s'exécute dans tous les cadres de la page correspondante ou uniquement dans le cadre supérieur. La valeur par défaut est false.

  • css

    string[] facultatif

    Noms des fichiers CSS à injecter dans le script de contenu.

  • js

    string[] facultatif

    Noms des fichiers JavaScript à injecter dans le script de contenu.

  • matchAboutBlank

    booléen facultatif

    Indique si le script de contenu doit être inséré dans about:blank et about:srcdoc. La valeur par défaut est false.

SetIcon

Action d'événement déclarative qui définit l'icône carrée n-dip pour l'action de la page ou l'action du navigateur de l'extension lorsque les conditions correspondantes sont remplies. Cette action peut être utilisée sans autorisations de l'hôte, mais l'extension doit comporter une action de page ou de navigateur.

Vous devez spécifier exactement un seul imageData ou path. Il s'agit de dictionnaires qui mappent un nombre de pixels sur une représentation d'image. La représentation de l'image dans imageData est un objet ImageData, par exemple à partir d'un élément canvas, tandis que la représentation de l'image dans path est le chemin d'accès à un fichier image par rapport au fichier manifeste de l'extension. Si les pixels de l'écran scale s'adaptent à un pixel indépendant de l'appareil, l'icône scale * n est utilisée. Si cette échelle est manquante, une autre image est redimensionnée à la taille requise.

Propriétés

  • constructor

    vide

    La fonction constructor se présente comme suit :

    (arg: SetIcon) => {...}

  • imageData

    ImageData | objet facultatif

    Objet ImageData ou dictionnaire {size -> ImageData} représentant une icône à définir. Si l'icône est spécifiée en tant que dictionnaire, l'image utilisée est choisie en fonction de la densité de pixels de l'écran. Si le nombre de pixels de l'image qui s'intègre dans une unité d'espace d'écran est égal à scale, une image de taille scale * n est sélectionnée, où n correspond à la taille de l'icône dans l'UI. Vous devez spécifier au moins une image. Notez que details.imageData = foo est équivalent à details.imageData = {'16': foo}.

ShowAction

Chrome 97 ou version ultérieure

Action d'événement déclarative qui définit l'action de la barre d'outils de l'extension sur "Activé" lorsque les conditions correspondantes sont remplies. Cette action peut être utilisée sans autorisations de l'hôte. Si l'extension dispose de l'autorisation activeTab, cliquer sur l'action de la page permet d'accéder à l'onglet actif.

Sur les pages où les conditions ne sont pas remplies, l'action de la barre d'outils de l'extension s'affiche en niveaux de gris. Si vous cliquez dessus, le menu contextuel s'ouvre au lieu de déclencher l'action.

Propriétés

ShowPageAction

Obsolète depuis Chrome 97

Veuillez utiliser declarativeContent.ShowAction.

Action d'événement déclarative qui définit l'action de la page de l'extension sur l'état "Activé" lorsque les conditions correspondantes sont remplies. Cette action peut être utilisée sans autorisations de l'hôte, mais l'extension doit comporter une action de page. Si l'extension dispose de l'autorisation activeTab, cliquer sur l'action de la page permet d'accéder à l'onglet actif.

Sur les pages où les conditions ne sont pas remplies, l'action de la barre d'outils de l'extension s'affiche en niveaux de gris. Si vous cliquez dessus, le menu contextuel s'ouvre au lieu de déclencher l'action.

Propriétés

Événements

onPageChanged

Fournit l'API d'événement déclaratif composée de addRules, removeRules et getRules.

Conditions