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
|
---
title: Chrome registration
slug: Mozilla/Chrome_Registration
translation_of: Mozilla/Chrome_Registration
---
<h2 id="What_is_Chrome.3F" name="What_is_Chrome.3F">Что такое chrome?</h2>
<p><a href="/en/Chrome" title="en/Chrome">Chrome</a> — это набор всех элементов UI в окне приложения, за исключением самого контента web-страницы. Панели инструментов, строки меню, индикаторы загрузки и панели заголовков окон — все это примеры элементов, которые обычно являются частью chrome.</p>
<p>Mozilla находит и считывает корневой <code>chrome.manifest</code> файл в поисках расширений и тем оформления.</p>
<div class="note">
<p><strong>Примечание:</strong> В версии {{Gecko("1.9.2")}} и старше Mozilla считывает <code>chrome/*.manifest</code> файлы из приложений. Начиная с {{Gecko("2.0")}}, корневой <code>chrome.manifest</code> — <em>единственный</em> используемый манифест; добавить дополнительные манифесты можно с помощью команды <a href="/en/Chrome_Registration#manifest" title="en/Chrome Registration#manifest"><code>manifest</code></a>, прописанной в корневом манифесте.</p>
</div>
<h2 id="Chrome_Providers" name="Chrome_Providers">Chrome-провайдеры</h2>
<p>Источник chrome для определенного типа окон (например, для окна браузера) называется chrome-провайдером (<em>англ. provider — поставщик</em>). Провайдеры, или поставщики, работают совместно, чтобы обеспечить полный набор элементов chrome для каждого конкретного окна, начиная от иконок на панелях инструментов, заканчивая файлами описания текста, контента и внешнего вида окна как такового.</p>
<p>Существует три основных вида ресурсов chrome:</p>
<dl>
<dt>Content</dt>
<dd>Главный исходный файл для описания окна исходит от провайдера <strong>content</strong>, он может быть любого типа, который сможеть обработать Mozilla. Скорее всего это будет XUL-файл, поскольку XUL спроектирован для описания содержимого окон и диалогов. JavaScript файлы, описывающие UI, также приведены в пакетах провайдера <strong>content</strong>, равно как и большинство XBL файлов сборки.</dd>
<dt>Locale</dt>
<dd>Локализуемые приложения содержат все переводы и связанную с локализацией информацию в провайдере <strong>locale</strong>. Такой подход позволяет переводчикам переводить только сами chrome-пакеты, не затрагивая основной исходный код. Два основных типа файлов локализации: DTD файлы и Java-подобные файлы свойств.</dd>
<dt>Skin</dt>
<dd>Провайдер <strong>skin</strong> отвечает за предоставление полного набора файлов, описывающих внешний вид chrome. Обычно это CSS файлы и изображения.</dd>
</dl>
<div class="note">
<p><strong>Примечание:</strong> Скрипты (включая те, которые найдены в <a href="/en/XBL" title="en/XBL">XBL</a>), загруженные из провайдера skin, не будут запущены на исполнение.</p>
</div>
<h2 id="The_Chrome_Registry" name="The_Chrome_Registry">Реестр chrome</h2>
<p>Среда Gecko предоставляет сервис, известный как <em>реестр chrome</em>. Этот сервис обеспечивает преобразование имен из chrome-пакетов в физическое расположение этих пакетов на диске.</p>
<p>Реестр chrome настраиваем и имеет строгую структуру, поэтому пользователь может устанавливать сторонние провайдеры chrome, и, таким образом, изменять внешний вид и локализацию. <span id="result_box" lang="ru"><span class="hps">Это делается при помощи</span> <span class="hps">XPInstall</span> <span class="hps">и</span> <span class="hps">менеджера расширений</span><span>.</span></span></p>
<p>Для того, чтобы сообщить реестру о новом доступном chrome, используется текстовый манифест: файл <code>chrome.manifest</code> в корне расширения, темы, или приложения XULRunner.</p>
<p>Текстовый манифест использует простую строчную разметку: каждая строка парсится отдельно. Если строка определяется реестром как валидная, то он выполняет действие или команду, описываемые этой строкой. Иначе строка игнорируется, а в консоль выводится сообщение об ошибке.</p>
<pre class="eval" style="white-space: pre-wrap;">locale packagename localename path/to/files
skin packagename skinname path/to/files
</pre>
<div class="note">
<p><strong>Примечание:</strong> В названии пакета недопустимо использование символов @ # ; : ? /</p>
</div>
<p></p><div class="warning">Firefox 2, Thunderbird 2 и SeaMonkey 1.1 не увидят chrome, если <code>packagename</code> содержит название, состоящее из букв разных регистров. Если пример выше содержит <code>packagename</code> <strong>C</strong>amel<strong>C</strong>ase<strong>P</strong>ackage, возникнет ошибка, примерное содержание: "No chrome registered for chrome://<strong>c</strong>amel<strong>c</strong>ase<strong>p</strong>ackage/path/to/files". Firefox 3, Thunderbird 3 и SeaMonkey 2 поддерживают название из букв разного регистра. Баг разрешен в Mozilla 1.9; см. {{bug(132183)}}.</div><p></p>
<h2 id="Manifest_Instructions" name="Manifest_Instructions">Инструкции в манифесте</h2>
<h3 id="comments" name="comments">Комментарии</h3>
<p>Комментарием считается любая строчка, начинающаяся с символа решётки ('#'). Всё написанное в комментарии игнорируется.</p>
<pre class="eval" style="white-space: pre-wrap;"># эта строчка - комментарий. здесь можно писать что угодно
</pre>
<h3 id="manifest" name="manifest">manifest</h3>
<p>{{ gecko_minversion_inline("2.0b4") }}</p>
<pre>manifest <em>subdirectory/foo.manifest [flags]</em>
</pre>
<p>Эта инструкция загрузит вспомогательный манифест. Это может быть полезно для разделения компонента и инструкции регистрации chrome, или разделения регистрационных данных, зависящих от платформы.</p>
<h3 id="binary-component">binary-component</h3>
<p>{{ gecko_minversion_inline("2.0b2") }}</p>
<pre>binary-component <em>components/mycomponent.dll [flags]</em>
</pre>
<p>Даёт Mozilla указание к регистрации и использованию бинарного компонента. Эта инструкция должны комбинироваться с флагом abi (<em>двоичного интерфейса приложений</em>), так как бинарные компоненты зависят от ABI. Вплоть <a href="/en/XPCOM/XPCOM_changes_in_Gecko_2.0" title="en/XPCOM/XPCOM changes in Gecko 2.0">до Firefox 4</a> файлы в директориях компонентов регистрировались автоматически.</p>
<h3 id="interfaces">interfaces</h3>
<p>{{ gecko_minversion_inline("2.0b2") }}</p>
<pre>interfaces <em>component/mycomponent.xpt [flags]</em>
</pre>
<p>Даёт указание загрузить информацию об интерфейсе из typelib-файла, созданного XPIDL.</p>
<p>Instructs Mozilla to load interface information from a typelib file produced by XPIDL. Вплоть <a href="/en/XPCOM/XPCOM_changes_in_Gecko_2.0" title="en/XPCOM/XPCOM changes in Gecko 2.0">до Firefox 4</a> файлы в директориях компонентов регистрировались автоматически.</p>
<h3 id="component">component</h3>
<p>{{ gecko_minversion_inline("2.0b2") }}</p>
<pre>component <em>{00000000-0000-0000-0000-000000000000}
components/mycomponent.js [flags]</em>
</pre>
<p>Даёт Mozilla CID компонента, реализованного компонентом XPCOM на JavaScript или любом другом поддерживаемом языке. ClassID {0000...} должен совпадать с ClassID компонента. Для генерации уникального ClassID, можно возпользоваться любым UUID генератором.</p>
<h3 id="contract">contract</h3>
<p>{{ gecko_minversion_inline("2.0b2") }}</p>
<pre>contract
<em>@foobar/mycontract;1 <em>{00000000-0000-0000-0000-000000000000} [flags]</em></em>
</pre>
<p>Сопостовляет читабельный ID договора с ClassID для точной реализации. <span id="result_box" lang="ru"><span class="hps">Обычно</span> <span class="hps">ID</span> <span class="hps">договора работает в паре</span> <span class="hps">с</span> объявлением <span class="hps">компонента</span><span>, указанным непосредственно перед записью <strong>contract</strong>.</span></span></p>
<h3 id="category">category</h3>
<p>{{ gecko_minversion_inline("2.0b2") }}</p>
<pre>category <em>category entry-name value [flags]</em>
</pre>
<p>Регистрирует запись в <a href="/en/XPCOM_Interface_Reference/nsICategoryManager" title="en/XPCOM Interface Reference/nsICategoryManager">менеджер категорий</a>. Особенности формата и значения записей категорий зависят от категории.</p>
<h3 id="content" name="content" style="min-height: 0;">content</h3>
<p>Пакет <strong>content</strong> регистрируется строчкой</p>
<pre>content <em>packagename</em> <em>uri/to/files/</em> <em>[flags]</em>
</pre>
<p>Это нужно для объявления пути, используемого при разрешении URI типа <code>chrome://<em>packagename</em>/content/...</code>. Этот URI может быть как абсолютным, так и относительным по отношению к манифеста. Внимание: он должен заканчиваться слэшем ('/').</p>
<h3 id="locale" name="locale">locale</h3>
<p>Регистрация пакета локализации происходит при помощи строки</p>
<pre class="eval" style="white-space: pre-wrap;">locale <em>packagename</em> <em>localename</em> <em>uri/to/files/</em> <em>[flags]</em>
</pre>
<p>Такая инструкция зарегистрирует пакет локализации при разрешении URI типа chrome://<em>packagename</em>/locale/... . Обычно localename это текстовой идентификатор страны "ru" или языка-страны "ru-RU". Если для пакета зарегистрировано несколько локализаций, реестр выберет наиболее подходящий для пользователя, учитывая пользовательские настройки языка.</p>
<h3 id="skin" name="skin">skin</h3>
<pre class="eval" style="white-space: pre-wrap;">skin <em>packagename</em> <em>skinname</em> <em>uri/to/files/</em> <em>[flags]</em>
</pre>
<p>Такая инструкция зарегистрирует пакет оформления при разрешении URI типа <a class="external" rel="freelink">chrome://packagename/skin/</a>... . <em>skinname</em> это строка, идентифицирующая установленный скин. Если для пакета зарегистрировано несколько оформлений, реестр выберет наиболее подходящий для пользователя, учитывая пользовательские настройки.</p>
<h3 id="overlay" name="overlay">overlay</h3>
<p>Оверлеи XUL регистрируются следующим образом:</p>
<pre class="eval" style="white-space: pre-wrap;">overlay chrome://<em>URI-to-be-overlaid</em> chrome://<em>overlay-URI</em> <em>[flags]</em>
</pre>
<h3 id="style" name="style">style</h3>
<p>Оверлеи стилей (особый CSS-файл, применяющийся к странице chrome) регистрируются следующим образом:</p>
<pre class="eval" style="white-space: pre-wrap;">style chrome://<em>URI-to-style</em> chrome://<em>stylesheet-URI</em> <em>[flags]</em>
</pre>
<div class="note"><strong>Примечание:</strong> Таким образом могут быть использованы только стили, использующие URI chrome://.</div>
<div class="note"> </div>
<h3 id="override" name="override">override</h3>
<p>In some cases an extension or embedder may wish to override a chrome file provided by the application or XULRunner. In order to allow for this, the chrome registration manifest allows for "override" instructions:</p>
<pre class="eval" style="white-space: pre-wrap;">override chrome://<em>package</em>/<em>type</em>/<em>original-uri.whatever</em> <em>new-resolved-URI</em> <em>[flags]</em>
</pre>
<p>Note: overrides are not recursive (so overriding <a class="external" rel="freelink">chrome://foo/content/bar/</a> with <a class="external" rel="freelink">file:///home/john/blah/</a> will not usually do what you want or expect it to do). Also, the path inside overridden files is relative to the overridden path, not the original one (this can be annoying and/or useful in CSS files, for example).</p>
<div class="note">
<p><strong>Note:</strong> There was a bug in {{Gecko("1.8.1.5")}} (Firefox 2.0.0.5) and earlier where you could not use a relative URL for the <em>new-resolved-URI</em> parameter. You needed to provide an absolute URL. See {{ Bug(323455) }}.</p>
</div>
<h3 id="resource" name="resource">resource</h3>
<p>{{ Fx_minversion_inline("3") }}</p>
<p>Aliases can be created using the <code>resource</code> instruction:</p>
<pre class="eval" style="white-space: pre-wrap;">resource <em>aliasname</em> <em>uri/to/files/</em> <em>[flags]</em>
</pre>
<p>This will create a mapping for <code>resource://<aliasname><span style="font-family: Verdana,Tahoma,sans-serif;">/</span></code> URIs to the path given.</p>
<div class="note">
<p><strong>Note:</strong> There are no security restrictions preventing web content from including content at resource: URIs, so take care what you make visible there.</p>
</div>
<h2 id="Manifest_Flags" name="Manifest_Flags">Manifest flags</h2>
<p>Manifest lines can have multiple, space-delimited flags added at the end of the registration line. These flags mark special attributes of chrome in that package, or limit the conditions under which the line is used.</p>
<h3 id="application" name="application">application</h3>
<p>Extensions may install into multiple applications. There may be chrome registration lines which only apply to one particular application. The flag</p>
<pre class="eval" style="white-space: pre-wrap;">application=<em>app-ID</em>
</pre>
<p>indicates that the instruction should only be applied if the extension is installed into the application identified by <em>app-ID</em>. Multiple application flags may be included on a single line, in which case the line is applied if any of the flags match.</p>
<p>This example shows how a different overlay can be used for different applications:</p>
<pre style="white-space: pre-wrap;">overlay chrome://browser/content/browser.xul chrome://myaddon/content/ffOverlay.xul application={ec8030f7-c20a-464f-9b0e-13a3a9e97384}
overlay chrome://messenger/content/mailWindowOverlay.xul chrome://myaddon/content/tbOverlay.xul application={3550f703-e582-4d05-9a08-453d09bdfdc6}
overlay chrome://songbird/content/xul/layoutBaseOverlay.xul chrome://myaddon/content/sbOverlay.xul application=songbird@songbirdnest.com
</pre>
<h3 id="appversion" name="appversion">appversion</h3>
<p>Extensions may install into multiple versions of an application. There may be chrome registration lines which only apply to a particular application version. The flag</p>
<pre class="eval" style="white-space: pre-wrap;">appversion=<em>version</em>
appversion<<em>version</em>
appversion<=<em>version</em>
appversion><em>version</em>
appversion>=<em>version</em>
</pre>
<p>indicates that the instruction should only be applied if the extension is installed into the application version identified. Multiple <code>appversion</code> flags may be included on a single line, in which case the line is applied if any of the flags match. The version string must conform to the <a href="/en/Toolkit_version_format" title="en/Toolkit_version_format">Toolkit version format</a>.</p>
<div class="note">
<p><strong>Note:</strong> Versions of Gecko before {{Gecko("1.8.0.13")}} and {{Gecko("1.8.1.5")}} contained a bug where if you use the comparisons <, > or =, the version string had be two or more characters long. If not, you would get a message in the error console that the <code>appversion</code> flag was not recognized. See {{ Bug(380398) }}.</p>
</div>
<h3 id="platformversion" name="platformversion">platformversion</h3>
<p>{{ gecko_minversion_inline("8.0") }} When supporting more then one application, it is often more convenient for an extension to specify which Gecko version it is compatible with. This is particularly true for binary components. If there are chrome registration lines which only apply to a particular Gecko version, the flag</p>
<pre class="eval" style="white-space: pre-wrap;">platformversion=<em>version</em>
platformversion<<em>version</em>
platformversion<=<em>version</em>
platformversion><em>version</em>
platformversion>=<em>version</em>
</pre>
<p>indicates that the instruction should only be applied if the extension is installed into an application using the Gecko version identified. Multiple <code>platformversion</code> flags may be included on a single line, in which case the line is applied if any of the flags match.</p>
<h3 id="contentaccessible" name="contentaccessible">contentaccessible</h3>
<p>{{ Fx_minversion_inline("3") }} Chrome resources can no longer be referenced from within <img>, <script>, or other elements contained in, or added to, content that was loaded from an untrusted source. This restriction applies to both elements defined by the untrusted source and to elements added by trusted extensions. If such references need to be explicitly allowed, set the <code>contentaccessible</code> flag to <code>yes</code> to obtain the behavior found in older versions of Firefox. <span class="comment">See {{ bug("436989") }}.</span></p>
<p>The <code>contentaccessible</code> flag applies only to content packages: it is not recognized for locale or skin registration. However, the matching locale and skin packages will also be exposed to content.</p>
<p><strong>n.b.:</strong> Because older versions of Firefox do not understand the <code>contentaccessible</code> flag, any extension designed to work with both Firefox 3 and older versions of Firefox will need to provide a fallback. For example:</p>
<pre style="white-space: pre-wrap;">content packagename chrome/path/
content packagename chrome/path/ contentaccessible=yes
</pre>
<h3 id="os" name="os">os</h3>
<p>{{ Fx_minversion_inline("3") }} Extensions (or themes) may offer different features depending on the operating system on which Firefox is running. The value is compared to the value of <a href="/en/OS_TARGET" title="en/OS_TARGET">OS_TARGET</a> for the platform.</p>
<pre class="eval" style="white-space: pre-wrap;">os=WINNT
os=Darwin
</pre>
<p>See <a href="/en/OS_TARGET" title="en/OS_TARGET">OS_TARGET</a> for a more complete list of os names. The os name is case insensitive.</p>
<h3 id="osversion" name="osversion">osversion</h3>
<p>{{ Fx_minversion_inline("3") }} An extension or theme may need to operate differently depending on which version of an operating system is running. For example, a theme may wish to adopt a different look on Mac OS X 10.5 than 10.4:</p>
<pre class="eval" style="white-space: pre-wrap;">osversion>=10.5
</pre>
<h3 id="platform_.28Platform-specific_packages.29" name="platform_.28Platform-specific_packages.29">abi</h3>
<p>{{ Fx_minversion_inline("4") }} If a component is only compatible with a particular ABI, it can specify which ABI/OS by using this directive. The value is taken from the <a href="/en/XPCOM_Interface_Reference/nsIXULRuntime" title="https://developer.mozilla.org/en/nsIXULRuntime">nsIXULRuntime</a> OS and XPCOMABI values (concatenated with an underscore). For example:</p>
<pre>binary-component component/myLib.dll abi=WINNT_<code>x86-MSVC
</code>binary-component component/myLib.so abi=Linux_<code>x86-gcc3 </code>
</pre>
<p>See <a href="/en/XPCOM_ABI" title="en/XPCOM ABI">XPCOM ABI</a> for more details.</p>
<h3 id="platform_.28Platform-specific_packages.29" name="platform_.28Platform-specific_packages.29">platform (Platform-specific packages)</h3>
<p>Some packages are marked with a special flag indicating that they are platform specific. Some parts of content, skin, and locales may be different based on the platform being run. These packages contain three different sets of files, for Windows and OS/2, Macintosh, and Unix-like platforms. For example, the order of the "OK" and "Cancel" buttons in a dialog is different, as well as the names of some items.</p>
<p>The "platform" modifier is only parsed for content registration; it is not recognized for locale or skin registration. However, it applies to content, locale, and skin parts of the package, when specified.</p>
<p>To indicate that a package is platform-specific, add the "platform" modifier to the "content" line after the path, for example:</p>
<pre class="eval" style="white-space: pre-wrap;">content global-platform jar:toolkit.jar!/toolkit/content/global-platform/ platform
</pre>
<p>Once that is specified in your manifest you then ensure that under the directory global-platform are subdirectories <code>win</code> (Windows/OS2), <code>mac</code> (OS9/OSX), or <code>unix</code> (Everything Else). Anything residing outside of these subdirectories will be ignored.</p>
<h3 id="xpcnativewrappers" name="xpcnativewrappers">xpcnativewrappers</h3>
<p>Chrome packages can decide whether to use the <a href="/en/XPCNativeWrapper" title="en/XPCNativeWrapper">XPCNativeWrapper</a> security mechanism to automatically protect their code against malicious content that they might access. See <a href="/en/Safely_accessing_content_DOM_from_chrome" title="en/Safely_accessing_content_DOM_from_chrome">Safely accessing content DOM from chrome</a> for details.</p>
<p>This flag is enabled by default since Firefox 1.5. Disabling it manually was possible by specifying <code>xpcnativewrappers=no</code> until Firefox 4.</p>
<div class="note">
<p><strong>Note:</strong> Support for this flag has been removed in {{Gecko("2.0")}}. You can no longer disable <code>XPCNativeWrapper</code>s. To update your add-on to work without this flag:</p>
<ul>
<li>If your add-on depends upon XBL bindings attached to content objects (that is, it needs to be able to call functions or get and set properties created by the XBL binding), you'll need to use the object's <a href="/en/wrappedJSObject" title="en/wrappedJSObject"><code>wrappedJSObject</code></a> property to obtain a wrapped object.</li>
<li>If you need to call functions or access properties defined by the content -- for example, if your add-on wants to add a button to the page that calls a JavaScript function defined by the page.</li>
</ul>
</div>
<p>The <code>xpcnativewrappers</code> flag applies only to content packages; it is not recognized for locale or skin registration.</p>
<h2 id="Example_Chrome_Manifest" name="Example_Chrome_Manifest">Example chrome manifest</h2>
<pre class="eval" style="white-space: pre-wrap;">content necko jar:comm.jar!/content/necko/
locale necko en-US jar:en-US.jar!/locale/en-US/necko/
content xbl-marquee jar:comm.jar!/content/xbl-marquee/
content pipnss jar:pipnss.jar!/content/pipnss/
locale pipnss en-US jar:en-US.jar!/locale/en-US/pipnss/
# Firefox-only
overlay <a class="external" rel="freelink">chrome://browser/content/pageInfo.xul</a> <a class="external" rel="freelink">chrome://pippki/content/PageInfoOverlay.xul</a> application={ec8030f7-c20a-464f-9b0e-13a3a9e97384}
# SeaMonkey-only
overlay <a class="external" rel="freelink">chrome://navigator/content/pageInfo.xul</a> <a class="external" rel="freelink">chrome://pippki/content/PageInfoOverlay.xul</a> application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
overlay <a class="external" rel="freelink">chrome://communicator/content/pref/preftree.xul</a> <a class="external" rel="freelink">chrome://pippki/content/PrefOverlay.xul</a>
content pippki jar:pippki.jar!/content/pippki/
locale pippki en-US jar:en-US.jar!/locale/en-US/pippki/
content global-platform jar:toolkit.jar!/content/global-platform/ platform
skin global classic/1.0 jar:classic.jar!/skin/classic/global/
override <a class="external" rel="freelink">chrome://global/content/netError.xhtml</a> jar:embedder.jar!/global/content/netError.xhtml
content inspector jar:inspector.jar!/content/inspector/
</pre>
<h2 id="Instructions_supported_in_bootstrapped_add_ons" name="Instructions_supported_in_bootstrapped_add_ons">Instructions supported in bootstrapped add-ons</h2>
<p>The following instructions are supported in <a href="/en/Extensions/Bootstrapped_extensions" title="en/Extensions/Bootstrapped extensions">Bootstrapped extensions</a>:</p>
<ul>
<li><code>manifest</code></li>
<li><code>content</code></li>
<li><code>locale</code></li>
<li><code>skin</code></li>
<li><code>override</code></li>
</ul>
<h2 id="Debugging_a_Chrome_Manifest_file" name="Debugging_a_Chrome_Manifest_file">Debugging a chrome manifest file</h2>
<p>The <a class="link-https" href="https://addons.mozilla.org/firefox/addon/chrome-list">Chrome List</a> extension (for Firefox 3.6 and older) shows all registered chrome. This is very helpful when trying to write a <code>chrome.manifest</code> file as you can inspect where the files are being mapped from (jar files, local directory, etc.)</p>
<h2 id="Old-style_contents.rdf_manifests" name="Old-style_contents.rdf_manifests">Old-style contents.rdf manifests</h2>
<p>Before the plaintext manifests were introduced (which happened in Firefox 1.5, Toolkit 1.8), RDF manifests named "contents.rdf" were used to register chrome. This format is deprecated; however, SeaMonkey versions before version 2 do not support the plaintext manifest format yet, so <code>contents.rdf</code> manifests are required for extensions that wish to maintain backwards compatibility with Firefox 1.0 or the suite.</p>
<p>{{ gecko_minversion_note("1.9.2", "The <code>contents.rdf</code> manifest format is no longer supported at all starting with Gecko 1.9.2; add-ons already installed using this format will continue to work but can no longer be installed. Be sure to remove your add-on and reinstall it to ensure that it installs correctly after updating it to use a plaintext manifest.") }}</p>
<h2 id="Official_References_for_Toolkit_API" name="Official_References_for_Toolkit_API">Official references for <a href="/en/Toolkit_API" title="en/Toolkit_API">Toolkit API</a></h2>
<p>{{ page("en-US/docs/Toolkit_API/Official_References") }}</p>
<p>{{ languages( { "fr": "fr/Enregistrement_chrome", "ja": "ja/Chrome_Registration", "pl": "pl/Rejestracja_Chrome" ,"zh-cn":"zh-cn/Chrome_Registration"} ) }}</p>
|