aboutsummaryrefslogtreecommitdiff
path: root/files/fr/mozilla/add-ons/install_manifests/index.html
blob: 841725f3704f0c28d03c4da5210ca92dd84eb17a (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
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
---
title: Install Manifests
slug: Mozilla/Add-ons/Install_Manifests
translation_of: Archive/Add-ons/Install_Manifests
---
<h2 id="Présentation">Présentation</h2>

<p>Un manifeste d'installation est un fichier d'application XUL add-on Manager-enabled (par exemple de Firefox ou de Thunderbird) utilisé pour déterminer les informations sur une add-on quant il est en cours d'installation. Il contient des métadonnées identifiant l'add-on, fournit des informations sur son créateur, des informations sur les versions, ses compatibilités, sa mis à jour, etc...</p>

<p>Le format du manifest d'installation est RDF/XML.</p>

<p>Le fichier doit être appelé <code>install.rdf</code> et se trouver au niveau le plus haut du fichier <a href="https://developer.mozilla.org/fr/docs/XPI">XPI</a> de l'add-on.</p>

<h2 id="Disposition">Disposition</h2>

<p>La disposition de base d'un Manifest d'installation est comme cela:</p>

<div style="overflow: hidden;">
<pre class="brush:xml;auto-links:false">&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:em="http://www.mozilla.org/2004/em-rdf#"&gt;
  &lt;Description about="urn:mozilla:install-manifest"&gt;
    &lt;!-- properties --&gt;
  &lt;/Description&gt;
&lt;/RDF&gt;
</pre>
</div>

<p>Certaines des propriétés sont essentielles, d'autres sont optionnelles. Certaines ont de simples chaînes comme valeur, d'autres sont de complexes ressources.</p>

<h2 id="Référence_de_Propriété_Requise">Référence de Propriété Requise</h2>

<p>Votre Manifest d'installation doit spécifier ces propriétés autrement votre add-on ne s'installera pas.</p>

<h3 id="id">id</h3>

<p>L'ID de l'extension, qui doit être l'une des suivantes:</p>

<ul>
 <li><a href="/en-US/docs/Generating_GUIDs" title="Generating_GUIDs">GUID</a> (Firefox 1.0)</li>
 <li>{{ Fx_minversion_inline(1.5) }} Une chaîne formatée ainsi: <code class="plain">extensionname@example.org</code></li>
</ul>

<p><span class="tlid-translation translation" lang="fr"><span title="">Ce dernier format est considérablement plus facile à générer et à manipuler.</span> <span title="">Firefox 1.5 vérifie que votre <code>id</code> correspond à un format ou à l'autre et refusera d'installer des addons contenant des <code>id</code> mal formés.</span> <span title="">Cependant, vous ne devriez pas utiliser une adresse email réelle pour votre <code>id</code>, car cela pourrait attirer des spams.</span></span></p>

<p><strong>Exemples</strong></p>

<pre class="brush:xml;auto-links:false">&lt;em:id&gt;extensionname@example.org&lt;/em:id&gt;

&lt;em:id&gt;{daf44bf7-a45e-4450-979c-91cf07434c3d}&lt;/em:id&gt;</pre>

<h3 id="version">version</h3>

<p>A version string identifying the version of the add-on being supplied.</p>

<p>For Firefox/Thunderbird 1.0, the format must conform to the rules specified in <a href="/en-US/docs/Extension_Versioning,_Update_and_Compatibility" title="Extension_Versioning,_Update_and_Compatibility">Extension Versioning, Update and Compatibility</a>. For Firefox/Thunderbird 1.5, see <a href="/en-US/docs/Toolkit_version_format" title="Toolkit_version_format">Toolkit version format</a>.</p>

<p><strong>Examples</strong></p>

<pre class="brush:xml">&lt;em:version&gt;2.0&lt;/em:version&gt;

&lt;em:version&gt;1.0.2&lt;/em:version&gt;

&lt;em:version&gt;0.4.1.2005090112&lt;/em:version&gt;</pre>

<p><strong>Firefox 1.5 / XULRunner 1.8</strong> - add-ons that do not use a valid version format will not be installed. The version format is different from, although backwards-compatible with, 1.0's.</p>

<p><strong>For addons hosted on addons.mozilla.org</strong> - Mozilla's update website may repackage your add-on and correct or reject malformed version strings.</p>

<h3 id="type">type</h3>

<p>An integer value representing the type of add-on.</p>

<table>
 <tbody>
  <tr>
   <td>2</td>
   <td>Extensions</td>
  </tr>
  <tr>
   <td>4</td>
   <td>Themes</td>
  </tr>
  <tr>
   <td>8</td>
   <td>Locale</td>
  </tr>
  <tr>
   <td>32</td>
   <td><a href="/en-US/docs/Multiple_Item_Packaging" title="Multiple_Item_Packaging">Multiple Item Package</a></td>
  </tr>
  <tr>
   <td>64</td>
   <td>Spell check dictionary</td>
  </tr>
  <tr>
   <td>128</td>
   <td><a href="https://wiki.mozilla.org/Telemetry/Experiments" title="Telemetry Experiments">Telemetry Experiment</a></td>
  </tr>
 </tbody>
</table>

<p><strong>Examples</strong></p>

<pre class="brush:xml">&lt;em:type&gt;2&lt;/em:type&gt;</pre>

<p>{{ Fx_minversion_inline(1.5) }} This property was added for Firefox 1.5, and is only required for add-on types other than Extensions and Themes.</p>

<p>{{ Fx_minversion_inline(3) }} Firefox 2 and previous supported a value of 16 to represent plug-ins. In Firefox 3 this has been removed.</p>

<h3 id="targetApplication">targetApplication</h3>

<p>An object specifying an application targeted by this add-on. This means that the add-on will work with the application identified by the id property (<code>&lt;em:id&gt;</code>) specified (for a comprehensive list of application IDs and valid min/maxVersions for them see <a class="link-https" href="https://addons.mozilla.org/en-US/firefox/pages/appversions">Valid application versions for add-on developers</a>), from the minimum version (<code>&lt;em:minVersion&gt;</code>) up to and including the maximum version (<code>&lt;em:maxVersion&gt;</code>). These version strings are formatted in the same fashion as the <a href="#version"><code>version</code> property</a> and will be compared to the application version; this allows the extension author to specify which versions of Firefox an extension has been tested with.</p>

<p><code>id</code>, <code>minVersion</code>, and <code>maxVersion</code> are all required.</p>

<div class="note"><strong>Note:</strong> Extensions compatible with Firefox 3.5 should specify a <code>maxVersion</code> of<code> 3.5.*</code>, so that they are automatically compatible with security and stability updates. For Firefox 3.0, a <code>maxVersion</code> of<code> 3.0.*</code> should be used. Extensions compatible only with Firefox or Thunderbird 2 should specify a <code>maxVersion</code> of <code>2.0.0.*</code>.</div>

<p>The Install Manifest must specify at least one of these objects, and may specify more if the add-on targets multiple applications that support the Add-on Manager (e.g. Firefox and Thunderbird).</p>

<p><strong>Examples</strong></p>

<pre class="brush:xml">&lt;em:targetApplication&gt;
 &lt;Description&gt;
  &lt;em:id&gt;{ec8030f7-c20a-464f-9b0e-13a3a9e97384}&lt;/em:id&gt; &lt;!--Firefox--&gt;
  &lt;em:minVersion&gt;1.5&lt;/em:minVersion&gt;
  &lt;em:maxVersion&gt;3.0.*&lt;/em:maxVersion&gt;
 &lt;/Description&gt;
&lt;/em:targetApplication&gt;</pre>

<p>{{ Fx_minversion_inline(3) }} Gecko 1.9 based applications allow you to use the special <code>targetApplication </code>id <code class="plain">toolkit@mozilla.org</code> to say that the add-on is compatible with any toolkit app with a toolkit version matching the <code>minVersion</code> and <code>maxVersion</code>.</p>

<h3 id="name">name</h3>

<p>The name of the add-on; intended for display in the UI.</p>

<p><strong>Examples </strong></p>

<pre class="brush:xml">&lt;em:name&gt;My Extension&lt;/em:name&gt;</pre>

<h2 id="Optional_Property_Reference">Optional Property Reference</h2>

<p>You may need to supply these properties, depending on the capabilities of your add-on.</p>

<h3 id="bootstrap">bootstrap</h3>

<p>{{ Fx_minversion_inline(4) }} A Boolean value that tells the application whether the extension is boot-strappable. At the moment this only works for add-ons with em:type="2". The default value is <code>false</code>. For more information, see <a href="/en-US/docs/Extensions/Bootstrapped_extensions" title="Extensions/Bootstrapped extensions">Bootstrapped extensions</a>.</p>

<h3 id="unpack">unpack</h3>

<p>{{ Fx_minversion_inline(4) }} A true or false value that tells the application whether the extension requires its files be unpacked into a directory in order to work or whether the extension can be loaded direct from the XPI. In versions before Gecko 2.0 all extensions were unpacked, in Gecko 2.0 and later the default is to not unpack. If an extension includes the following then it must request unpacking:</p>

<ul>
 <li>Binary <a href="/en-US/docs/XPCOM" title="XPCOM">XPCOM</a> components</li>
 <li><a href="/en-US/docs/Shipping_a_plugin_as_a_Toolkit_bundle" title="Shipping a plugin as a Toolkit bundle">Plugins</a></li>
 <li><a href="/en-US/docs/Creating_MozSearch_plugins" title="Creating MozSearch plugins">Search plugins</a></li>
 <li>DLLs loaded with <a href="/en-US/docs/Mozilla/js-ctypes" title="js-ctypes">ctypes</a></li>
 <li>Dictionaries</li>
 <li>Window icons</li>
</ul>

<p><strong>Examples</strong></p>

<pre class="brush:xml">&lt;Description about="urn:mozilla:install-manifest"&gt;
   &lt;em:id&gt;extension@mysite.com&lt;/em:id&gt;
   &lt;em:unpack&gt;true&lt;/em:unpack&gt;
   ...
&lt;/Description&gt;</pre>

<h3 id="skinnable">skinnable</h3>

<p>{{ Fx_minversion_inline(4) }} A true or false value property fo that tells the application whether the (complete) theme can be skinned by lightweight themes/personas:</p>

<p><strong>Examples</strong></p>

<pre class="brush:xml">&lt;em:skinnable&gt;true&lt;/em:skinnable&gt;
</pre>

<h3 id="localized">localized</h3>

<p>{{ Fx_minversion_inline(3) }} Allows you to localize the add-on's name, description, contributors and other metadata. The localized description must specify at least one <code>em:locale</code> which indicates which locales to use this information for.</p>

<p><strong>Examples</strong></p>

<p>This declares a set of add-on metadata to be displayed when the application is running in the de-DE locale.</p>

<pre class="brush:xml">&lt;em:localized&gt;
  &lt;Description&gt;
    &lt;em:locale&gt;de-DE&lt;/em:locale&gt;
    &lt;em:name&gt;Tab Sidebar&lt;/em:name&gt;
    &lt;em:description&gt;Zeigt in einer Sidebar Vorschaubilder der Inhalte aller offenen Tabs an.&lt;/em:description&gt;
  &lt;/Description&gt;
&lt;/em:localized&gt;</pre>

<p>The following properties which are described elsewhere in this page can be included in the localized property:</p>

<ul>
 <li>name</li>
 <li>description</li>
 <li>creator</li>
 <li>homepageURL</li>
 <li>developer</li>
 <li>translator</li>
 <li>contributor</li>
</ul>

<p>More documentation can be found at <a href="/en-US/docs/Localizing_extension_descriptions" title="Localizing_extension_descriptions">Localizing extension descriptions</a>.</p>

<h3 id="description">description</h3>

<p>A short description of the add-on - intended for display in the user interface. This description should fit on one short line of text.</p>

<p><strong>Examples</strong></p>

<pre class="brush:xml">&lt;em:description&gt;Advanced foo tools.&lt;/em:description&gt;</pre>

<h3 id="creator">creator</h3>

<p>The name of the creator/principal developer - intended for display in the user interface.</p>

<p><strong>Examples</strong></p>

<pre class="brush:xml">&lt;em:creator&gt;John Doe&lt;/em:creator&gt;</pre>

<p>or</p>

<pre class="brush:xml">&lt;em:creator&gt;CoolExtension Team&lt;/em:creator&gt;</pre>

<h3 id="developer">developer</h3>

<p>{{ Fx_minversion_inline(2) }} The name(s) of co-developers. You may specify more than one of this value to specify multiple developers.</p>

<p><strong>Examples</strong></p>

<pre class="brush:xml">&lt;em:developer&gt;Jane Doe&lt;/em:developer&gt;
&lt;em:developer&gt;Koos van der Merwe&lt;/em:developer&gt;
</pre>

<h3 id="translator">translator</h3>

<p>{{ Fx_minversion_inline(2) }} The name(s) of translators. You may specify more than one of this value to specify multiple translators.</p>

<p><strong>Examples</strong></p>

<pre class="brush:xml">&lt;em:translator&gt;Janez Novak&lt;/em:translator&gt;
&lt;em:translator&gt;Kari Nordmann&lt;/em:translator&gt;
</pre>

<h3 id="contributor">contributor</h3>

<p>The name(s) of additional contributors. You may specify more than one of this value to specify multiple contributors.</p>

<p><strong>Examples</strong></p>

<pre class="brush:xml">&lt;em:contributor&gt;John Doe&lt;/em:contributor&gt;

&lt;em:contributor&gt;John Doe&lt;/em:contributor&gt;
&lt;em:contributor&gt;Jane Doe&lt;/em:contributor&gt;
&lt;em:contributor&gt;Elvis Presley&lt;/em:contributor&gt;
</pre>

<h3 id="homepageURL">homepageURL</h3>

<p>A link to the add-on's home page - intended for display in the user interface.</p>

<p><strong>Examples</strong></p>

<pre class="brush:xml;auto-links:false">&lt;em:homepageURL&gt;http://www.foo.com/&lt;/em:homepageURL&gt;
</pre>

<h3 id="updateURL">updateURL</h3>

<p>A link to a custom Update Manifest file that specifies available updates to the add-on. The format is described below. If enabled, the add-on manager periodically checks with this Manifest file to determine if newer versions are available. When not included, the add-on manager will still check for updates on AMO, using the ID of the extension.</p>

<div class="note"><strong>Note:</strong> It is strongly recommended that the <code>updateURL</code> be an HTTPS (secure) link. Non-secure update URLs can be hijacked by a malicious <code>update.rdf</code> file, enabling malware to infiltrate the user's computer. <strong>Alternatively, you could host your extension on </strong><a class="external" href="http://addons.mozilla.org"><strong>AMO</strong></a><strong> and leave out the <code>updateURL</code> completely.</strong> This provides secure updates automatically.</div>

<p>{{ Fx_minversion_inline(3) }} For security reasons, Gecko 1.9 applications <strong>require</strong> that if you specify an <code>updateURL</code>, it must be an https URL, or you must include an <code><a href="#updateKey">updateKey</a></code>.</p>

<p>Your server must send this file as <code>text/rdf</code>, <code>text/xml</code> or <code>application/rdf+xml</code> or the update checker may not work.</p>

<p>The addon manager will substitute the following values into this URL in case you wish to generate the response RDF dynamically, such as using PHP or CGI:</p>

<table>
 <tbody>
  <tr>
   <td><code>%REQ_VERSION%</code></td>
   <td>The version of the request. Currently 1</td>
  </tr>
  <tr>
   <td><code>%ITEM_ID%</code></td>
   <td>The <code>id</code> of the addon being updated</td>
  </tr>
  <tr>
   <td><code>%ITEM_VERSION%</code></td>
   <td>The <code>version</code> of the addon being updated</td>
  </tr>
  <tr>
   <td><code>%ITEM_MAXAPPVERSION%</code></td>
   <td>The <code>maxVersion</code> of the <code>targetApplication</code> object corresponding to the current application for the addon being updated.</td>
  </tr>
  <tr>
   <td><code>%ITEM_STATUS%</code></td>
   <td>{{ Fx_minversion_inline(2) }} Comma separated list of the add-ons operating status in the application. Contains at the least either <code>userEnabled</code> or <code>userDisabled</code> plus any number of <code>incompatible</code>, <code>blockslisted</code> or <code>needsDependencies</code>.</td>
  </tr>
  <tr>
   <td><code>%APP_ID%</code></td>
   <td>The <code>id</code> of the current application</td>
  </tr>
  <tr>
   <td><code>%APP_VERSION%</code></td>
   <td>The <code>version</code> of the application to check for updates for</td>
  </tr>
  <tr>
   <td><code>%CURRENT_APP_VERSION%</code></td>
   <td>{{ Fx_minversion_inline(3.5) }} The <code>version</code> of the current application</td>
  </tr>
  <tr>
   <td><code>%APP_OS%</code></td>
   <td>{{ Fx_minversion_inline(1.5) }} The value of <code><a href="/en-US/docs/OS_TARGET" title="OS_TARGET">OS_TARGET</a></code> from the Firefox build system, identifying the operating system being used.</td>
  </tr>
  <tr>
   <td><code>%APP_ABI%</code></td>
   <td>{{ Fx_minversion_inline(1.5) }} The value of the <code><a href="/en-US/docs/XPCOM_ABI" title="XPCOM_ABI">TARGET_XPCOM_ABI</a></code> value from the Firefox build system, identifying the compiler/architecture combination used to compile the current application.</td>
  </tr>
  <tr>
   <td><code>%APP_LOCALE%</code></td>
   <td>{{ Fx_minversion_inline(3) }} The current application's locale.</td>
  </tr>
  <tr>
   <td><code>%UPDATE_TYPE%</code></td>
   <td>{{ Fx_minversion_inline(4) }} <code>UPDATE_TYPE_COMPATIBILITY(32)</code>, <code>UPDATE_TYPE_NEWVERSION(64)</code></td>
  </tr>
  <tr>
   <td><code>%COMPATIBILITY_MODE%</code></td>
   <td>{{ Fx_minversion_inline(10) }} related to <a href="/en-US/docs/Firefox/Updating_add-ons_for_Firefox_10#Compatible_by_default" title="https://developer.mozilla.org/en-US/docs/Firefox/Updating_add-ons_for_Firefox_10#Compatible_by_default">default to compatible</a>, values could be <code>normal</code>, <code>ignore</code> or <code>strict</code>.</td>
  </tr>
 </tbody>
</table>

<p><strong>Examples</strong></p>

<pre class="brush:xml;auto-links:false">&lt;em:updateURL&gt;http://www.foo.com/update.cgi?id=%ITEM_ID%&amp;amp;version=%ITEM_VERSION%&lt;/em:updateURL&gt;
&lt;em:updateURL&gt;http://www.foo.com/extension/windows.rdf&lt;/em:updateURL&gt;
</pre>

<p><strong>For add-ons hosted on addons.mozilla.org:</strong> You may not specify an <code>updateURL</code> property. By default, Mozilla applications using the Add-on Manager (such as Firefox and Thunderbird) will send update requests to <code>addons.mozilla.org</code> using the default web service. Every time you upload a new version of your add-on or change its compatibility parameters through the author interface, your update manifest will be generated automatically.</p>

<p><strong>Format of the Update Manifest:</strong> The Update Manifest is a RDF/XML datasource. For an example of an update manifest, see <a href="/en-US/docs/Extension_Versioning,_Update_and_Compatibility#Update_RDF_Format" title="Extension_Versioning,_Update_and_Compatibility#Update_RDF_Format">Extension Versioning, Update and Compatibility</a>.</p>

<h3 id="updateKey">updateKey</h3>

<div>{{ Gecko_minversion_header(1.9) }} {{ Fx_minversion_header(3) }}</div>

<p>To ensure the security of update rdf data that is retrieved over plain http you must use a digital signature to verify the contents of the data. In order to do so you must include the public part of the cryptographic key in an updateKey entry in the install.rdf of the add-on. This can be generated using the <a href="/en-US/docs/McCoy" title="McCoy">McCoy</a> tool. Any line breaks and whitespace as part of this entry are ignored.</p>

<pre class="brush:xml">&lt;em:updateKey&gt;MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDK426erD/H3XtsjvaB5+PJqbhj
              Zc9EDI5OCJS8R3FIObJ9ZHJK1TXeaE7JWqt9WUmBWTEFvwS+FI9vWu8058N9CHhD
              NyeP6i4LuUYjTURnn7Yw/IgzyIJ2oKsYa32RuxAyteqAWqPT/J63wBixIeCxmysf
              awB/zH4KaPiY3vnrzQIDAQAB&lt;/em:updateKey&gt;
</pre>

<h3 id="optionsURL">optionsURL</h3>

<p>The <code>chrome://</code> URL of the extension's options dialog box. This is only useful to extensions. If this property is specified, when the extension is selected in the Extensions list, the Options button is enabled and will show this.</p>

<pre class="brush:xml">&lt;em:optionsURL&gt;chrome://myext/content/options.xul&lt;/em:optionsURL&gt;</pre>

<p>{{ gecko_minversion_note("7", "In Firefox 7 you can also simply include your options XUL as a file named <code>options.xul</code>, in the base directory of the add-on.") }}</p>

<p>{{ h3_gecko_minversion("optionsType", 7) }}</p>

<p>The type of user-interface used for displaying the options. Accepted values are:</p>

<table>
 <tbody>
  <tr>
   <td>1</td>
   <td>Opens optionsURL in a dialog box</td>
  </tr>
  <tr>
   <td>2</td>
   <td><a href="/en-US/docs/Extensions/Inline_Options" title="Extensions/Inline Options">Options are displayed inside the Add-on Manager</a></td>
  </tr>
  <tr>
   <td>3</td>
   <td>Opens optionsURL in a new tab (if the application supports that), or a dialog box</td>
  </tr>
 </tbody>
</table>

<p>optionsType defaults to 1 if there is an optionsURL included in install.rdf or 2 if there is no optionsURL and the file <code>options.xul</code> exists in the root of the add-on.</p>

<pre class="brush:xml">&lt;em:optionsType&gt;2&lt;/em:optionsType&gt;
</pre>

<h4 id="Open_Options_in_New_Tab_Gecko_minversion_header(7)">Open Options in New Tab {{ Gecko_minversion_header(7) }}</h4>

<p>Options can be opened in a new tab since Firefox 7.0a1. To do so, set optionsType to 3 and set optionsURL to a the path of a page to open.</p>

<pre class="brush:xml">&lt;em:optionsType&gt;3&lt;/em:optionsType&gt;
&lt;em:optionsURL&gt;chrome://myaddon/content/options.html&lt;/em:optionsURL&gt;</pre>

<p>This section here contains an example of localized HTML page as an option panel in a new tab: <a href="/en-US/Add-ons/Bootstrapped_extensions#Localization_%28L10n%29">Bootstrapped Extensions :: Localization (L10n)</a> (example linked to is: <a href="https://github.com/Noitidart/l10n/tree/html-options">GitHub :: l10n-html-options</a>)</p>

<h4 id="Make_Options_Button_Execute_Arbitrary_Javascript">Make Options Button Execute Arbitrary Javascript</h4>

<div class="note">
<p>This method is not recomended by AMO Editors, however it is noted here in case none of the default methods suit the developers needs. For example: Overlay a panel over Add-on Manager on click of options button</p>
</div>

<p>If the default methods offered by <code>optionsType</code> does not fit your needs (see the table above), there is a last resort option. The method here is to use inline JavaScript and the observer service. The observer service is used to send a notification on click of the options button and then from your add-on, when you receive that notification, you can do whatever you want. For example, in the <code>install.rdf</code> we would have:</p>

<pre class="brush:xml">&lt;em:optionsType&gt;2&lt;/em:optionsType&gt;
&lt;em:optionsURL&gt;javascript:Components.utils.import('resource://gre/modules/Services.jsm');Services.obs.notifyObservers(window, 'hellothisisyourcaptainspeaking', 'options'); window.close();&lt;/em:optionsURL&gt;</pre>

<p>This sends a notification <code>hellothisisyourcaptainspeaking</code> and passes <code>window </code>to the listener. Notice the <code>window.close()</code> at the end of this inline script. This is important, because an invisible modal dialog is opened and this script runs in that context. So if you do not close the window, you will be stuck modal mode (clicks and key presses will not take). That's why we have to re-import the <code>Services.jsm</code>. Now in your add-on have a listener that does this:</p>

<pre class="brush: js">var observer = {
  observe: function(aSubject, aTopic, aData) {
    //do something here, such as insert panel element into addon manager and load your page in an iframe in this panel
  }
};

Services.obs.addObserver(observer, "hellothisisyourcaptainspeaking", false);
// Don't forget to remove your observer when your add-on is shut down.</pre>

<h3 id="aboutURL">aboutURL</h3>

<p>The<code> chrome://</code> URL of the extension's about dialog box. This is only useful to extensions. If this property is specified,  in the <code>about:addons</code> extensions list, the <code>About..</code>. link in the extension's context menu will show this dialog, rather than the default.</p>

<div class="note">
<p><strong>Note:</strong> As of {{Gecko("2.0")}}, the dialog receives the <code>Addon</code> object representing your add-on as a parameter.</p>
</div>

<p><strong>Examples</strong></p>

<pre class="brush:xml">&lt;em:aboutURL&gt;<a class="external" rel="freelink">chrome://myext/content/about.xul</a>&lt;/em:aboutURL&gt;
</pre>

<h3 id="iconURL">iconURL</h3>

<p>A <code>chrome://</code> URL to an icon to display in the add-ons list. The icon will be displayed at 32x32 in Firefox 3.6 and lower. In Firefox 4.0 and later the icon can be up to 48x48 pixels in size. If this property is not specified, a default icon is used.</p>

<pre class="brush:xml">&lt;em:iconURL&gt;<a class="external" rel="freelink">chrome://myext/skin/icon.png</a>&lt;/em:iconURL&gt;
</pre>

<div class="note"><strong>Note:</strong> For the above example to work you will also have to add a <code>skin package</code> line to your <code>chrome.manifest</code> file. See <a href="/en-US/docs/Chrome_Registration#skin" title="Chrome_Registration#skin">Chrome Registration#skin</a>. Alternatively you can place your icon in the directory specified in your <code>content package</code> line.</div>

<p>{{ gecko_minversion_note("1.9.2", "Starting in Gecko 1.9.2 (Firefox 3.6), you can also simply include your icon, named <code>icon.png</code>, in the base directory of the add-on. This allows your add-on's icon to be displayed even when the add-on is disabled, or if the manifest is missing an <code>iconURL</code> entry.") }}</p>

<p>{{ h3_gecko_minversion("icon64URL", "2.0") }}</p>

<p>A <code>chrome://</code> URL to a 64x64 pixel icon to display in the add-on's details view . If this property is not specified, the smaller icon above will be used.</p>

<pre class="brush:xml">&lt;em:icon64URL&gt;<a class="external" rel="freelink">chrome://myext/skin/icon64.png</a>&lt;/em:icon64URL&gt;
</pre>

<div class="note"><strong>Note:</strong> For the above example to work you will also have to add a <code>skin package</code> line to your <code>chrome.manifest</code> file. See <a href="/en-US/docs/Chrome_Registration#skin" title="Chrome_Registration#skin">Chrome Registration#skin</a>. Alternatively you can place your icon in the directory specified in your <code>content package</code> line.</div>

<p>{{ gecko_minversion_note("2.0", "Starting in Gecko 2.0 (Firefox 4.0), you can also simply include your icon, named <code>icon64.png</code>, in the base directory of the add-on. This allows your add-on's icon to be displayed even when the add-on is disabled, or if the manifest is missing an <code>icon64URL</code> entry.") }}</p>

<p>{{ h3_gecko_minversion("targetPlatform", "1.8") }}</p>

<p>A string specifying a platform that the add-on supports. It contains either the value of <code><a href="/en-US/docs/OS_TARGET" title="OS_TARGET">OS_TARGET</a></code> alone or combined with <code><a href="/en-US/docs/XPCOM_ABI" title="XPCOM_ABI">TARGET_XPCOM_ABI</a></code>, separated by an underscore (_).</p>

<p>You can specify multiple <code>targetPlatform</code> properties per manifest. If any value matches the application's build parameters, it will be installed; if not, the user will get an appropriate error message.</p>

<p><strong>Examples</strong></p>

<pre class="brush:xml">&lt;em:targetPlatform&gt;WINNT_x86-msvc&lt;/em:targetPlatform&gt;

&lt;em:targetPlatform&gt;Linux&lt;/em:targetPlatform&gt;

&lt;em:targetPlatform&gt;Darwin_ppc-gcc3&lt;/em:targetPlatform&gt;

&lt;em:targetPlatform&gt;SunOS_sparc-sunc&lt;/em:targetPlatform&gt;</pre>

<p>Usually, you would use only the OS part for themes or for extensions that are not fully cross-platform. For extensions including binary (compiled) components, you should never use the OS alone, but include the <a href="/en-US/docs/XPCOM_ABI" title="XPCOM_ABI">ABI (s)</a> that you compiled the components with. If you want to include multiple versions of the components, you should also use <a href="/en-US/docs/Bundles#Platform-specific_Subdirectories" title="Bundles#Platform-specific_Subdirectories">Platform-specific Subdirectories</a>.</p>

<p><strong>Notes</strong></p>

<ul>
 <li>In the same manifest file, you could even mix values with and without ABI. If a value for the application's OS is encountered that requires any specific ABI, the ABI is considered important for that OS and the application will refuse to install the add-on if it does not find a matching OS/ABI combination. This means that if all of the above examples would occur in one manifest, the add-on will install on any Linux build of the application, regardless of its ABI, but not on a Windows Cygwin build.</li>
 <li>There may be builds of Firefox and Thunderbird which do not "know" their ABI (most likely ports to rare platforms, or non-official builds). These builds will refuse to install any addon that requires a specific ABI for their platform.</li>
</ul>

<p>This property was added for Firefox/Thunderbird 1.5. Previous versions of these applications will ignore the restrictions and install the add-on regardless of the platform.</p>

<p>{{ h3_gecko_minversion("strictCompatibility", "10.0") }}</p>

<p>A Boolean value indicating if the add-on should be enabled when the version of the application is greater than its max version. By default, the value of this property is <code>false</code> meaning that the compatibility checking will not be performed against the max version.</p>

<pre class="brush:xml">&lt;em:strictCompatibility&gt;true&lt;/em:strictCompatibility&gt;</pre>

<p>Usually, there is no need to restrict the compatibility: not all new releases will break your extension and, if it is hosted on AMO, you'll get notice several weeks in advance if a potential risk has been detected. Moreover, an extension being disabled, even for a short period, leads to a bad experience for the user. About the only time you should need to set this if your add-on does things that are likely to be broken by Firefox updates. You <strong>do not</strong> need to set this flag if your add-on has a binary component, since add-ons with binary components are always subject to strict compatibility checking (because binary components need to be rebuilt for every major application release anyway).</p>

<div class="note"><strong>Note:</strong> If you want to restore the old behavior of strict compatibility checking of all add-ons, regardless of the value of this setting in their manifests, you can set the <code>extensions.strictCompatibility</code> preference to <code>true</code>.</div>

<div class="note">
<p><strong>Note:</strong> Starting in {{Gecko("11.0")}}, applications such as Firefox will assume add-ons that have not been updated in a very long time are no longer compatible by default.</p>
</div>

<p>{{ h3_gecko_minversion("multiprocessCompatible", "33.0") }}</p>

<p>A Boolean value declaring whether this add-on is, or is not, compatible with <a href="/en-US/Add-ons/Working_with_multiprocess_Firefox">multiprocess Firefox</a>. If present and set to <code>true</code>, this flag instructs Firefox not to load various <a href="/en-US/Firefox/Multiprocess_Firefox/Limitations_of_chrome_scripts#Compatibility_shims">compatibility shims</a> that enable many add-ons to work even when the add-on is not compatible with multiprocess Firefox:</p>

<pre class="brush: xml">&lt;em:multiprocessCompatible&gt;true&lt;/em:multiprocessCompatible&gt;</pre>

<p>The setting defaults to <code>false</code>, meaning that if you omit the property, the shims are loaded for your add-on.</p>

<p>You can set this property to test whether your add-on is multiprocess compatible, or after you have ensured that it is multiprocess compatible. In some future release we will change the default to <code>true</code>,  and after that point incompatible add-ons will have to explicitly declare that they are not compatible.</p>

<h2 id="Obsolete_Property_Reference">Obsolete Property Reference</h2>

<p>These properties were required in older versions of the Add-on Manager, but have been replaced with newer and better mechanisms.</p>

<h3 id="file">file</h3>

<p><strong>Firefox 1.0</strong> This property pointed to a chrome <code>.jar</code> file that contains chrome packages that require registration with the Chrome Registry.</p>

<p>The <code>&lt;em:file&gt;</code> property has a complex object value. The uri of the value is <code>urn:mozilla:extension:file:jarFile.jar</code> where <code>jarFile.jar</code> is the name of the jar file that contains the chrome package's files. This could also be the name of a directory that contains the chrome package's files, un-jarred (e.g. <code>urn:mozilla:extension:file:directory</code>). In either case, the referenced chrome package file(s) must be placed in the <code>chrome</code> subdirectory of the XPI's top level.</p>

<p>This object has a <code>package</code> property (with a path within the jar file or directory that leads to the location where the <code>contents.rdf</code> file responsible for registering that package is located), a <code>locale</code> property (ditto, but to register the locale) and a <code>skin</code> property (ditto, but to register the theme material).</p>

<p>In extensions for Firefox 1.5, this property is no longer necessary: the <code><a href="/en-US/docs/Chrome_Registration" title="Chrome_Registration">chrome.manifest</a></code> at the top level of the XPI is used to locate chrome to register. If there is no chrome.manifest, this property is still read by the Add-on Manager and a chrome.manifest is generated from old-style contents.rdf.</p>

<p><strong>Examples</strong></p>

<pre class="brush:xml">&lt;em:file&gt;
 &lt;Description about="urn:mozilla:extension:file:myext.jar"&gt;
  &lt;em:package&gt;content/myext/&lt;/em:package&gt;
  &lt;em:locale&gt;locale/en-US/myext/&lt;/em:locale&gt;
  &lt;em:skin&gt;skin/classic/myext/&lt;em:skin&gt;
 &lt;/Description&gt;
&lt;/em:file&gt;
</pre>

<p>An Install Manifest may specify multiple <code>file</code> properties, one for each jar file or subdirectory that contains chrome to register.</p>

<h3 id="hidden">hidden</h3>

<p><strong>Firefox 1.0</strong><strong> - 3.5</strong> A boolean value that when <code>true</code> makes the add-on not show up in the add-ons list, provided the add-on is installed in a {{ Anch("restricted access area") }} (so it does not work for add-ons installed in the profile). This is for bundling integration hooks to larger applications where having an entry in the Extensions list does not make sense.</p>

<div class="note"><strong>Note:</strong> This property is no longer supported under Gecko 1.9.2 (Firefox 3.6) or later, to prevent extensions from being installed in such a way that the user might not be able to tell they're installed.</div>

<p><strong>Examples</strong></p>

<pre class="brush:xml">&lt;em:hidden&gt;true&lt;/em:hidden&gt;
</pre>

<h3 id="requires">requires</h3>

<p><strong>Firefox 2.0 - 3.6.x</strong>. Other versions will ignore the restrictions and install the add-on regardless of the requirements.</p>

<p>See <a class="link-https" href="https://groups.google.com/forum/#!topic/mozilla.dev.platform/u9QT2ZucV-c" title="https://groups.google.com/forum/#!topic/mozilla.dev.platform/u9QT2ZucV-c">Replacement for install.rdf property "requires"</a> discussion for rationale behind removing this feature and the suggested workaround.</p>

<p><code>&lt;em:requires</code>&gt; has a similar syntax to the <code>&lt;em:targetApplication&gt;</code> tag (i.e. you must specify <code>&lt;em:id&gt;</code>, <code>&lt;em:minVersion&gt;</code>, <code>&lt;em:maxVersion&gt;</code> when using it). If the add-on specified by the <code>&lt;em:id&gt;</code> tag is not installed or has an incompatible version, the extension manager will disable your extension and show the message "Requires additional items". You can add as many <code>&lt;em:requires&gt;</code> tags as you like. Your extension will be disabled if any of the specified requirements fail. It is not possible to add dependencies that are specific to a <code>&lt;em:targetApplication&gt;</code>. See <a href="https://wiki.mozilla.org/Extension_Dependencies" title="https://wiki.mozilla.org/Extension_Dependencies">Extension Dependencie</a>s for more details.</p>

<h2 id="Glossary">Glossary</h2>

<h2 id="restricted_access_area">restricted access area</h2>

<p>A <em>restricted access area</em> is an install location that could be restricted on a restricted-access account, regardless of whether or not the location is restricted with the current user privileges (see {{ Source("toolkit/mozapps/extensions/public/nsIExtensionManager.idl#80", "nsIInstallLocation::restricted") }}). Currently, the <code>($APPDIR)/extensions</code> folder and the registry install location under <code>HKEY_LOCAL_MACHINE</code> (see <a href="/en-US/docs/Adding_Extensions_using_the_Windows_Registry" title="Adding_Extensions_using_the_Windows_Registry">Adding Extensions using the Windows Registry</a> for details) are restricted.</p>

<p>The <code>($PROFILE)/extensions</code> and <code>HKEY_CURRENT_USER</code> install locations, on the other hand, are not restricted.</p>