aboutsummaryrefslogtreecommitdiff
path: root/files/fr/mozilla/add-ons/webextensions/manifest.json/content_scripts/index.md
blob: e0474695ef8919cf70009f9261894b2ca894f359 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
---
title: content_scripts
slug: Mozilla/Add-ons/WebExtensions/manifest.json/content_scripts
tags:
  - Add-ons
  - Extensions
  - WebExtensions
translation_of: Mozilla/Add-ons/WebExtensions/manifest.json/content_scripts
---
{{AddonSidebar}}

<table class="standard-table">
  <tbody>
    <tr>
      <th scope="row">Type</th>
      <td>{{ jsxref("array", "Tableau") }}</td>
    </tr>
    <tr>
      <th scope="row">Obligatoire</th>
      <td>Non</td>
    </tr>
    <tr>
      <th scope="row">Exemple</th>
      <td>
        <pre class="brush: json">
"content_scripts": [
  {
    "matches": ["*://*.mozilla.org/*"],
    "js": ["borderify.js"]
  }
]</pre
        >
      </td>
    </tr>
  </tbody>
</table>

Ordonne au navigateur de charger des [scripts de contenu](/fr/docs/Mozilla/Add-ons/WebExtensions/Content_scripts) dans les pages web dont l’URL correspond à un modèle donné.

Cette clé est un tableau. Chaque élément est un objet qui :

- **doit** contenir une clé nommée **`matches`**, qui spécifie les modèles d’URL à reconnaître afin que les scripts soient chargés ;
- **peut** contenir des clés nommées **`js`** et **`css`**, qui listent les scripts à charger dans les pages correspondantes ;
- **peut** contenir un certain nombre d’autres propriétés qui contrôlent des aspects plus fins correspondant à quand et comment les scripts de contenu sont chargés.

Le tableau ci-dessous présente le détail de toutes les clés que vous pouvez inclure.

<table class="standard-table">
  <thead>
    <tr>
      <th scope="col">Nom</th>
      <th scope="col">Type</th>
      <th scope="col">Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code>all_frames</code></td>
      <td>{{ jsxref("boolean", "Booléen") }}</td>
      <td>
        <p>
          <code>true</code> : injecte les scripts spécifiés dans
          {{ anch("js") }} et {{ anch("css") }} dans tous les cadres
          correspondant aux exigences d’URL spécifiées, même s’il n’est pas le
          cadre le plus haut d’un onglet. Cela n’injecte pas dans les cadres
          enfants quand seul leur parent correspond aux exigences d’URL et pas
          les cadres enfants. Les exigences d’URL sont vérifiées pour chaque
          cadre indépendamment.
        </p>
        <p>
          <code>false</code> : injecte seulement dans le cadre le plus haut de
          l’onglet qui répond aux exigences d’URL.
        </p>
        <p>Par défaut à <code>false</code>.</p>
      </td>
    </tr>
    <tr>
      <td><code>css</code></td>
      <td>{{ jsxref("array", "Tableau") }}</td>
      <td>
        <p>
          Un tableau de chemins, relatifs à <em>manifest.json</em>, référençant
          les fichiers CSS qui seront injectés dans les pages correspondantes.
        </p>
        <p>
          Les fichiers sont injectés dans l’ordre donné, et avant que le DOM ne
          soit chargé.
        </p>
        <div class="note">
          <p>
            <strong>Note :</strong> Firefox résout les URLs dans les fichiers
            CSS injectés par rapport au fichier CSS lui-même, plutôt que par
            rapport à la page dans laquelle il est injecté.
          </p>
        </div>
      </td>
    </tr>
    <tr>
      <td><code>exclude_globs</code></td>
      <td>{{ jsxref("array", "Tableau") }}</td>
      <td>
        <p>
          Un tableau de chaînes contenant des caractères génériques. Voir les
          {{ anch("Les_modèles_de_correspondance_d’URL", "modèles de correpondance d’URL") }}
          ci-dessous.
        </p>
      </td>
    </tr>
    <tr>
      <td><code>exclude_matches</code></td>
      <td>{{ jsxref("array", "Tableau") }}</td>
      <td>
        <p>
          Un tableau de
          <a href="/fr/docs/Mozilla/Add-ons/WebExtensions/Match_patterns"
            >modèles de correspondance</a
          >. Voir les
          {{ anch("Les_modèles_de_correspondance_d’URL", "modèles de correpondance d’URL") }}
          ci-dessous.
        </p>
      </td>
    </tr>
    <tr>
      <td><code>include_globs</code></td>
      <td>{{ jsxref("array", "Tableau") }}</td>
      <td>
        Un tableau de chaînes contenant des caractères génériques. Voir les
        {{ anch("Les_modèles_de_correspondance_d’URL", "modèles de correpondance d’URL") }}
        ci-dessous.
      </td>
    </tr>
    <tr>
      <td><code>js</code></td>
      <td>{{ jsxref("array", "Tableau") }}</td>
      <td>
        <p>
          Un tableau de chemins, relatifs au fichier <em>manifest.json</em>,
          référençant les fichiers JavaScript qui seront injectés dans les pages
          correspondantes.
        </p>
        <p>
          Les fichiers sont injectés dans l’ordre indiqué. Cela signifie que,
          par exemple, si vous incluez ici jQuery suivi d’un autre script de
          contenu, comme ceci :
        </p>
        <pre class="brush: json">
"js": ["jquery.js", "my-content-script.js"]</pre
        >
        <p>alors <em>my-content-script.js</em> peut utiliser jQuery.</p>
        <p>
          Les fichiers sont injectés au moment spécifié par
          {{ anch("run_at") }}.
        </p>
      </td>
    </tr>
    <tr>
      <td><code>match_about_blank</code></td>
      <td>{{ jsxref("boolean", "Booléen") }}</td>
      <td>
        <p>
          Insère les scripts de contenu dans les pages dont l’URL est
          <code>about:blank</code> ou <code>about:srcdoc</code>, si l’URL de la
          page qui a ouvert ou créé cette page
          {{ anch("Les_modèles_de_correspondance_d’URL", "correspond aux modèles") }}
          spécifiés dans le reste de la clé <code>content_scripts</code>.
        </p>
        <p>
          Ceci est particulièrement utile pour exécuter des scripts dans des
          {{ htmlelement("iframe", "iframes") }} vides, dont l’URL
          est <code>about:blank</code>. Pour ce faire, vous devez également
          définir la clé <code>all_frames</code>.
        </p>
        <p>
          Par exemple, supposons que vous disposiez d’une clé de
          <code>content_scripts</code> comme ceci :
        </p>
        <pre class="brush: json">
"content_scripts": [
  {
    "js": ["my-script.js"],
    "matches": ["https://example.org/"],
    "match_about_blank": true,
    "all_frames": true
  }
]</pre
        >
        <p>
          Si l’utilisateur ou l’utilisatrice charge
          <code>https://example.org/</code>, et si cette page intègre une iframe
          vide, alors <em>my-script.js</em> sera chargé dans l’iframe.
        </p>
        <p>
          <code>match_about_blank</code> est supporté dans Firefox à partir de
          la version 52. Notez que dans Firefox, les scripts de contenu ne
          seront pas injectés dans les iframes vides à
          <code>"document_start"</code> même si vous spécifiez cette valeur dans
          {{ anch("run_at") }}.
        </p>
      </td>
    </tr>
    <tr>
      <td><code>matches</code></td>
      <td>{{ jsxref("array", "Tableau") }}</td>
      <td>
        <p>
          Un ensemble de
          <a href="/fr/docs/Mozilla/Add-ons/WebExtensions/Match_patterns"
            >modèles de correspondance</a
          >. Voir les
          {{ anch("Les_modèles_de_correspondance_d’URL", "modèles de correpondance d’URL") }}
          ci-dessous.
        </p>
        <p>C’est la seule clé obligatoire.</p>
      </td>
    </tr>
    <tr>
      <td><code>run_at</code></td>
      <td>{{ jsxref("string", "Chaîne") }}</td>
      <td>
        <p>
          Cette option détermine quand les scripts spécifiés dans
          {{ anch("js") }} sont injectés. Vous pouvez fournir une chaîne
          parmi trois ici, chacune identifiant un état dans le processus de
          chargement d’un document. Les états correspondent directement à
          {{domxref("Document/readyState", "Document.readyState")}} :
        </p>
        <ul>
          <li>
            <code>"document_start"</code> : correspond à <code>"loading"</code>.
            Le DOM est toujours en cours de chargement.
          </li>
          <li>
            <code>"document_end"</code> : correspond à
            <code>"interactive"</code>. Le DOM a fini de charger, mais des
            ressources telles que des scripts et des images peuvent toujours
            être en cours de chargement.
          </li>
          <li>
            <code>"document_idle"</code> : correspond à <code>"complete"</code>.
            Le document et toutes ses ressources ont terminé de charger.
          </li>
        </ul>
        <p>La valeur par défaut est <code>"document_idle"</code>.</p>
        <p>
          Dans tous les cas, les fichiers dans {{ anch("js") }} sont
          injectés après les fichiers dans {{ anch("css") }}.
        </p>
      </td>
    </tr>
  </tbody>
</table>

## Les modèles de correspondance d’URL

La clé `content_scripts` associe les scripts de contenu aux documents en fonction de la correspondance des URL : si l’URL du document correspond à la spécification de la clé, le script sera joint. Il existe quatre propriétés dans `content_scripts` que vous pouvez utiliser pour cette spécification :

- `matches` : un tableau de [match patterns](/fr/docs/Mozilla/Add-ons/WebExtensions/Match_patterns) (modèles).
- `exclude_matches` : un tableau de [match patterns](/fr/docs/Mozilla/Add-ons/WebExtensions/Match_patterns).
- `include_globs` : un tableau de {{ anch("globs") }} (caractères génériques).
- `exclude_globs` : un tableau de {{ anch("globs") }}.

Pour associer une de ces propriétés, une URL doit correspondre à au moins un des éléments de son tableau. Par exemple, donner une propriété comme :

```json
"matches": ["*://*.example.org/*", "*://*.example.com/*"]
```

Les deux adresses `http://example.org/` et `http://example.com/` correspondront.

Étant donné que `matches` est la seule clé obligatoire, les trois autres clés sont utilisées pour limiter davantage les URL qui correspondent. Pour associer la clé dans son ensemble, une URL doit :

1.  Correspondre à la propriété `matches` ;
2.  ET associer à la propriété `include_globs`, si présent ;
3.  ET NE PAS correspondre à la propriété `exclude_matches`, si présent ;
4.  ET NE PAS correspondre à la propriété `exclude_globs`, si présent.

### globs

Un « glob » est juste une chaîne qui peut contenir des caractères génériques. Il existe deux types de caractères génériques, et vous pouvez les combiner dans le même glob :

- `"*"` correspond à zéro ou plus de caractères
- `"?"` correspond exactement à un caractère.

Par exemple : `"*na?i"` correspond à `"illuminati"` et à `"annunaki"`, mais pas à `"sagnarelli"`.

## Exemple

```json
"content_scripts": [
  {
    "matches": ["*://*.mozilla.org/*"],
    "js": ["borderify.js"]
  }
]
```

Cela injecte un seul script de contenu _borderify.js_ dans toutes les pages sous `mozilla.org` ou l’un de ses sous-domaines, qu’ils soient fournis via HTTP ou HTTPS.

```json
"content_scripts": [
  {
    "exclude_matches": ["*://developer.mozilla.org/*"],
    "matches": ["*://*.mozilla.org/*"],
    "js": ["jquery.js", "borderify.js"]
  }
]
```

Cela implique deux scripts de contenu dans toutes les pages sous `mozilla.org` ou l’un de ses sous-domaines, à l’exception de `developer.mozilla.org`, qu’il s’agisse de HTTP ou HTTPS.

Les scripts de contenu ont la même vue du DOM et sont injectés dans l’ordre où ils apparaissent dans le tableau, de sorte que _borderify.js_ peut voir les variables globales ajoutées par _jquery.js_.

## Compatibilité des navigateurs

{{Compat("webextensions.manifest.content_scripts")}}