aboutsummaryrefslogtreecommitdiff
path: root/files/ja/extensions/bootstrapped_extensions/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'files/ja/extensions/bootstrapped_extensions/index.html')
-rw-r--r--files/ja/extensions/bootstrapped_extensions/index.html386
1 files changed, 0 insertions, 386 deletions
diff --git a/files/ja/extensions/bootstrapped_extensions/index.html b/files/ja/extensions/bootstrapped_extensions/index.html
deleted file mode 100644
index ed72d81d3d..0000000000
--- a/files/ja/extensions/bootstrapped_extensions/index.html
+++ /dev/null
@@ -1,386 +0,0 @@
----
-title: ブートストラップ型拡張機能
-slug: Extensions/Bootstrapped_extensions
-tags:
- - Add-ons
- - Extensions
- - Firefox 4
- - Gecko 2.0
- - Guide
- - Localization
- - NeedsTechnicalReview
-translation_of: Archive/Add-ons/Bootstrapped_extensions
----
-<p>{{ gecko_minversion_header("2.0") }}</p>
-
-<div class="note">
-<p>なお、<a class="link-https" href="https://addons.mozilla.org/en-US/developers/docs/sdk/latest/">Add-on SDK</a>を使って作成された拡張機能はすべて bootstrappedです!ブート処理コードは自動的に生成されるので、それについて考える必要はまったくありません。 Add-on SDKを使っていない? 読むべきです...</p>
-</div>
-
-<p>従来型の拡張機能は<strong>オーバーレイ</strong>を含んでおり、アプリケーションが拡張機能のパッケージから XUL を読み込み、その UI 部品をアプリケーションのユーザインタフェース (UI) 上へ自動的に適用します。この仕組みを使うと、アプリケーションの UI へ部品を追加する拡張機能を比較的簡単に作成できますが、拡張機能の更新、インストール、無効化を行う際にアプリケーションの再起動が必要となります。</p>
-
-<p>Gecko 2.0 {{ geckoRelease("2.0") }} では新たに<strong>ブートストラップ型拡張機能</strong> (bootstrapped extension) という仕組みが導入されました。これは特別な拡張機能で、オーバーレイを使って独自の UI 部品をアプリケーションへ適用する代わりに、アプリケーションへ動的に部品を挿入できるようにするものです。この処理は、拡張機能のインストール、削除、起動、終了時にブラウザが呼び出す関数を記述した、拡張機能に含まれる特別なスクリプトファイルを使って行われます。</p>
-
-<p>アプリケーションが行うのはこのスクリプトファイルに書かれた関数を呼び出すことだけで、UI 部品の追加や削除、その他必要とされる起動・終了時の処理などはすべて拡張機能自身が責任を持って行う必要があります。</p>
-
-<p>この記事ではブートストラップ型拡張機能の仕組みを解説します。移行の段階的で実験的なガイドについては、<a href="https://developer.mozilla.org/en-US/Add-ons/How_to_convert_an_overlay_extension_to_restartless">オーバーレイ拡張機能から再起動なしへの変換</a>に関するこのチュートリアルを参照して下さい。</p>
-
-<h2 id="起動・終了プロセス">起動・終了プロセス</h2>
-
-<p>ブートストラップ型拡張機能の重要な機能のひとつに、アプリケーションの指示による任意のタイミングで起動や終了が可能であることが挙げられます。拡張機能の <code>startup</code>() 関数が呼び出されたとき、UI 部品やその他の動作をアプリケーションへ動的に挿入する必要があります。同じように、<code>shutdown</code> 関数が呼び出されたときは、アプリケーションへ追加した部品やそのオブジェクトへの参照をすべて削除しなければなりません。</p>
-
-<p><code>startup</code> 関数が呼び出される場面はいくつかあります。例えば、</p>
-
-<ul>
- <li>拡張機能が始めてインストールされるとき (その拡張機能がアプリケーションと互換性があり、なおかつ有効化されている場合)</li>
- <li>アドオンマネージャの画面上で拡張機能が有効化されるとき</li>
- <li>アプリケーション起動時 (その拡張機能がアプリケーションと互換性があり、なおかつ有効化されている場合)</li>
-</ul>
-
-<p><code>shutdown</code> 関数が呼び出される場面は次のようなときです。</p>
-
-<ul>
- <li>拡張機能が削除されるとき (その拡張機能が有効化されている場合)</li>
- <li>拡張機能が無効化されるとき</li>
- <li>アプリケーション終了時 (その拡張機能が有効化されている場合)</li>
-</ul>
-
-<h2 id="アプリケーションの_UI_変更に関する注意">アプリケーションの UI 変更に関する注意</h2>
-
-<h3 id="ブートストラップ型拡張機能内の_chrome.manifest">ブートストラップ型拡張機能内の chrome.manifest</h3>
-
-<p>ブートストラップ型拡張機能に <a href="/ja/docs/Chrome_Registration"><code>chrome.manifest</code></a> ファイルを含めると次のようなことが可能となります。</p>
-
-<ol>
- <li>拡張機能に含まれるコンテンツを <code>chrome://</code> URI を通じて利用可能にする (マニフェスト内の <code>content</code>、<code>locale</code>、<code>skin</code> 命令文を使う)</li>
- <li>既存の <code>chrome://</code> URI を自作コンテンツで置き換える (<code>override</code> 命令文を使う)</li>
-</ol>
-
-<p>ブートストラップ型拡張機能の中では使えないマニフェスト命令文もあります。例えば <a href="/ja/docs/XUL_Overlays">XUL オーバーレイ</a> を登録することはできません。詳しくは <a href="/ja/docs/Chrome_Registration"><code>chrome.manifest</code></a> の記事を参照してください。</p>
-
-<p>Firefox 10 以降では、拡張機能 XPI ファイル内のルートに (<code>install.rdf</code> と同列で) 置かれている <code>chrome.manifest</code> ファイルは自動的に読み込まれます。Firefox 8 と 9 では、{{ ifmethod("nsIComponentManager", "addBootstrappedManifestLocation") }} と {{ ifmethod("nsIComponentManager", "removeBootstrappedManifestLocation") }} を使ってマニフェストを動的に読み込み、終了時に読み込み解除する必要があります。この機能は Firefox 8 未満のバージョンでは使用できません。</p>
-
-<h3 id="UI_部品の動的な追加">UI 部品の動的な追加</h3>
-
-<p>ここまで読んで、アプリケーションの UI を変更するブートストラップ型拡張機能を作り始めようと思ったら、最初に次のようなコードを考えましょう。</p>
-
-<p>まず、関連するアプリケーションの UI 要素を、{{ domxref("document.getElementById()") }} を使って、その ID で参照します。次に、それらを操作して独自の UI 部品を挿入します。例えば、Firefox のメニューバーは <code>document.getElementById("main-menubar")</code> で参照可能です。</p>
-
-<p>終了時には、追加した UI 部品を必ず削除しましょう。</p>
-
-<h2 id="ブートストラップ型拡張機能の作成">ブートストラップ型拡張機能の作成</h2>
-
-<p>拡張機能がブートストラップ型であることを示すには、以下の要素を <a href="/ja/docs/Install_Manifests">インストールマニフェスト</a> へ追加する必要があります。</p>
-
-<pre class="notranslate"><code>&lt;em:bootstrap&gt;true&lt;/em:bootstrap&gt;</code></pre>
-
-<p>それから、必要な関数を記述する <a href="/ja/docs/Extensions/bootstrap.js"><code><strong>bootstrap.js</strong></code> ファイル</a> を追加します。これは拡張機能パッケージ内の <a href="/ja/docs/Install_Manifests"><code>install.rdf</code> ファイル</a> と同列で配置します。</p>
-
-<h3 id="後方互換性">後方互換性</h3>
-
-<p>Firefox の旧バージョンは <code>bootstrap</code> プロパティや <code>bootstrap.js</code> ファイルを認識できないため、ブートストラップ型と従来型を兼ねた拡張機能の開発は非常に難しいと言えます。まずはブートストラップ型拡張機能として作成し、次に従来のオーバーレイも追加することになります。そうすることで、Firefox の新バージョンは <code>bootstrap.js</code> スクリプトを使い、コンポーネントやオーバーレイを無視しますが、旧バージョンにはオーバーレイを使わせられます。</p>
-
-<h2 id="ブート処理が呼び出されるタイミング_エントリーポイント">ブート処理が呼び出されるタイミング (エントリーポイント)</h2>
-
-<p><code>bootstrap.js</code> スクリプトにはいくつかの特定の関数を含める必要があります。それらは拡張機能を管理するブラウザによって呼び出されます。このスクリプトは特権付きサンドボックス内で実行され、拡張機能の終了時までキャッシュされます。</p>
-
-<h3 id="startup">startup</h3>
-
-<p>拡張機能がそれ自身を起動する必要があるときに呼び出されます。アプリケーションの起動時や、無効化されている拡張機能が有効化されるとき、更新をインストールするときにも呼び出されます。そのため、アプリケーションの起動中に何度も呼び出される可能性があります。</p>
-
-<p>このタイミングで、独自の UI 部品を挿入したり、必要な処理を開始したりします。</p>
-
-<pre class="notranslate">void startup(
-  data,
-  reason
-);
-</pre>
-
-<h6 id="引数">引数</h6>
-
-<dl>
- <dt><code>data</code></dt>
- <dd><a href="#Bootstrap_data">ブートストラップデータ構造</a>。</dd>
- <dt><code>reason</code></dt>
- <dd><a href="#Reason_constants">理由定数</a> のひとつで、拡張機能が起動されようとしている理由を示します。<code>APP_STARTUP</code>、<code>ADDON_ENABLE</code>、<code>ADDON_INSTALL</code>、<code>ADDON_UPGRADE</code>、<code>ADDON_DOWNGRADE</code> のいずれかになります。</dd>
-</dl>
-
-<h3 id="shutdown">shutdown</h3>
-
-<p>拡張機能がそれ自身を終了する必要があるときに呼び出されます。アプリケーションの終了時や、拡張機能が更新あるいは無効化されるときなどです。このタイミングで、挿入した UI 部品をすべて削除し、処理を停止し、オブジェクトを破棄する必要があります。</p>
-
-<pre class="notranslate">void shutdown(
-  data,
-  reason
-);
-</pre>
-
-<h6 id="引数_2">引数</h6>
-
-<dl>
- <dt><code>data</code></dt>
- <dd><a href="#Bootstrap_data">ブートストラップデータ構造</a>。</dd>
- <dt><code>reason</code></dt>
- <dd><a href="#Reason_constants">理由定数</a> のひとつで、拡張機能が終了されようとしている理由を示します。<code>APP_SHUTDOWN</code>、<code>ADDON_DISABLE</code>、<code>ADDON_UNINSTALL</code>、<code>ADDON_UPGRADE</code>、<code>ADDON_DOWNGRADE</code> のいずれかになります。</dd>
-</dl>
-
-<h3 id="install">install</h3>
-
-<p>ブートストラップスクリプトにはオプションで <code>install</code> 関数を含めることができます。これは、拡張機能がインストール、更新、あるいはダウングレードされた後、<code>startup</code> 関数の初回呼び出し前に、アプリケーションによって呼び出されます。</p>
-
-<div class="note"><strong>注:</strong> この関数は、拡張機能が一度も起動されていない場合は呼び出されません。例えば、拡張機能がインストールされたもののアプリケーションの現在のバージョンと互換性がなく、互換性が確保される前に削除された場合、<code>install</code> 関数は一度も呼び出されません。しかし、拡張機能がそのアプリケーションと互換性のあるバージョンへ更新された場合、<code>install</code> 関数はその時点で、<code>startup</code> 関数の初回呼び出し前に呼び出されます。</div>
-
-<pre class="notranslate">void install(
-  data,
-  reason
-);
-</pre>
-
-<h6 id="引数_3">引数</h6>
-
-<dl>
- <dt><code>data</code></dt>
- <dd><a href="#Bootstrap_data">ブートストラップデータ構造</a>。</dd>
- <dt><code>reason</code></dt>
- <dd><a href="#Reason_constants">理由定数</a> のひとつで、拡張機能がインストールされようとしている理由を示します。<code>ADDON_INSTALL</code>、<code>ADDON_UPGRADE</code>、<code>ADDON_DOWNGRADE</code> のいずれかになります。</dd>
-</dl>
-
-<h3 id="uninstall">uninstall</h3>
-
-<p>このオプション関数は、拡張機能の特定のバージョンが削除された後、<code>shutdown</code> 関数の最終呼び出し後に呼び出されます。これは、<code>install</code> 関数が一度も呼び出されていない場合は呼び出されません。</p>
-
-<div class="note"><strong>注:</strong> <code>uninstall</code> 関数は、拡張機能が無効化されている場合や、アプリケーションの現在のバージョンと互換性がない場合でも呼び出される場合があることに注意してください。このため、この関数を実装する場合は、使用している API がアプリケーションに実装されていない可能性も考慮し、適切に処理することが重要です。なお、この関数は Firefox が起動していないときに外部アプリケーションによって拡張機能が削除された場合には呼び出されません。</div>
-
-<div class="note"><strong>Note: </strong>Simply having <code>function install() {} </code>IS NOT ENOUGH because if you have code in <code>uninstall </code>it will not run. You MUST run some code in the <code>install </code>function; at the least you must set parameters for the <code>install </code>function, such as: <code>function install(aData, aReason) {}</code>; then uninstall WILL WORK.</div>
-
-<div class="note"><strong>Note:</strong> If you open the add-on manager and then click "Remove" on an add-on, it will not call uninstall function right away. This is a soft uninstall because of the available "Undo" option. If the add-on manager is closed or another event takes place such that the "Undo" option becomes unavailable, then the hard uninstall takes place and the uninstall function is called.</div>
-
-<div class="note"><strong>Note:</strong> The uninstall function fires on downgrade and upgrade as well so you should make sure it is an uninstall by doing this:<br>
-<code>function uninstall(aData, aReason) {</code><br>
-<code>     if (aReason == ADDON_UNINSTALL) {</code><br>
-<code>          console.log('really uninstalling');</code><br>
-<code>     } else {</code><br>
-<code>          console.log('not a permanent uninstall, likely an upgrade or downgrade');</code><br>
-<code>     }</code><br>
-<code>}</code></div>
-
-<pre class="notranslate">void uninstall(
-  data,
-  reason
-);
-</pre>
-
-<h6 id="引数_4">引数</h6>
-
-<dl>
- <dt><code>data</code></dt>
- <dd><a href="#Bootstrap_data">ブートストラップデータ構造</a>。</dd>
- <dt><code>reason</code></dt>
- <dd><a href="#Reason_constants">理由定数</a> のひとつで、拡張機能が削除されようとしている理由を示します。<code>ADDON_UNINSTALL</code>、<code>ADDON_UPGRADE</code>、<code>ADDON_DOWNGRADE</code> のいずれかになります。</dd>
-</dl>
-
-<h2 id="理由定数">理由定数</h2>
-
-<p>ブートストラップ関数は <code>reason</code> 引数を取ることができます。拡張機能は、その関数が呼び出された理由をこの引数で確かめられます。理由定数は以下の通りです。</p>
-
-<table class="standard-table">
- <tbody>
- <tr>
- <td class="header">定数</td>
- <td class="header">値</td>
- <td class="header">意味</td>
- </tr>
- <tr>
- <td><code>APP_STARTUP</code></td>
- <td>1</td>
- <td>アプリケーションが起動されようとしている</td>
- </tr>
- <tr>
- <td><code>APP_SHUTDOWN</code></td>
- <td>2</td>
- <td>アプリケーションが終了されようとしている</td>
- </tr>
- <tr>
- <td><code>ADDON_ENABLE</code></td>
- <td>3</td>
- <td>拡張機能が有効化されようとしている</td>
- </tr>
- <tr>
- <td><code>ADDON_DISABLE</code></td>
- <td>4</td>
- <td>拡張機能が無効化されようとしている (<a class="link-https" href="https://bugzilla.mozilla.org/show_bug.cgi?id=620541">削除時にも送信されます</a>)</td>
- </tr>
- <tr>
- <td><code>ADDON_INSTALL</code></td>
- <td>5</td>
- <td>拡張機能がインストールされようとしている</td>
- </tr>
- <tr>
- <td><code>ADDON_UNINSTALL</code></td>
- <td>6</td>
- <td>拡張機能が削除されようとしている</td>
- </tr>
- <tr>
- <td><code>ADDON_UPGRADE</code></td>
- <td>7</td>
- <td>拡張機能が更新されようとしている</td>
- </tr>
- <tr>
- <td><code>ADDON_DOWNGRADE</code></td>
- <td>8</td>
- <td>拡張機能がダウングレードされようとしている</td>
- </tr>
- </tbody>
-</table>
-
-<h2 id="ブートストラップデータ">ブートストラップデータ</h2>
-
-<p>上記の各関数 (エントリーポイント) には、その拡張機能に関する有用な情報が含まれるシンプルなデータ構造が渡されます。拡張機能に関するより詳しい情報は <code><a href="/ja/docs/Addons/Add-on_Manager/AddonManager#getAddonByID()">AddonManager.getAddonByID()</a></code> を呼び出すことで取得できます。このデータは単純な JavaScript オブジェクトで、以下のプロパティが含まれます。</p>
-
-<table class="standard-table">
- <tbody>
- <tr>
- <td class="header">プロパティ</td>
- <td class="header">型</td>
- <td class="header">意味</td>
- </tr>
- <tr>
- <td><code>id</code></td>
- <td><code>string</code></td>
- <td>ブート処理される拡張機能の ID</td>
- </tr>
- <tr>
- <td><code>version</code></td>
- <td><code>string</code></td>
- <td>ブート処理される拡張機能のバージョン</td>
- </tr>
- <tr>
- <td><code>installPath</code></td>
- <td><code>nsIFile</code></td>
- <td>ブート処理される拡張機能がインストールされている場所。これは、拡張機能がインストール時に展開されているかどうかによって、ディレクトリもしくは XPI ファイルとなります</td>
- </tr>
- <tr>
- <td><code>resourceURI</code></td>
- <td><code>nsIURI</code></td>
- <td>
- <p>拡張機能ファイルのルートを示す URI。これは、拡張機能がインストール時に展開されているかどうかによって、<code>jar:</code> もしくは <code>file:</code> URI となります {{ gecko_minversion_inline("7.0") }}</p>
- </td>
- </tr>
- </tbody>
-</table>
-
-<table class="standard-table" style="height: 242px; width: 454px;">
- <tbody>
- <tr>
- <td><code>oldVersion</code></td>
- <td><code>string</code></td>
- <td>The previously installed version, if the reason is <code>ADDON_UPGRADE</code> or <code>ADDON_DOWNGRADE</code>, and the method is <code>install</code> or <code>startup</code>. {{ gecko_minversion_inline("22.0") }}</td>
- </tr>
- <tr>
- <td><code>newVersion</code></td>
- <td><code>string</code></td>
- <td>The version to be installed, if the reason is <code>ADDON_UPGRADE</code> or <code>ADDON_DOWNGRADE</code>, and the method is <code>shutdown</code> or <code>uninstall</code>. {{ gecko_minversion_inline("22.0") }}</td>
- </tr>
- </tbody>
-</table>
-
-<div class="note">
-<p><strong>Note:</strong> An add-on may be upgraded/downgraded at application startup, in this case the <code>startup</code> method reason is <code>APP_STARTUP</code>, and the <code>oldVersion</code> property is not set. Also be aware that in some circumstances an add-on upgrade/downgrade may occur without the <code>uninstall</code> method being called.</p>
-</div>
-
-<h2 id="Add-on_debugger">Add-on debugger</h2>
-
-<p>From Firefox 31 onwards, you can use the <a href="https://developer.mozilla.org/en-US/Add-ons/Add-on_Debugger">Add-on Debugger</a> to debug bootstrapped add-ons.</p>
-
-<h2 id="Localization_L10n">Localization (L10n)</h2>
-
-<p>Localizing bootstrapped add-ons is very much the same since Firefox 7, as that is when chrome.manifest compatibility landed.</p>
-
-<h3 id="JS_and_JSM_Files_-_Using_Property_Files">JS and JSM Files - Using Property Files</h3>
-
-<p>To localize your .js and .jsm files you have to use <a href="https://developer.mozilla.org/en-US/docs/XUL/Tutorial/Property_Files">property files</a>.</p>
-
-<p>The absolute minimum needed here is:</p>
-
-<ol>
- <li>File: install.rdf</li>
- <li>File: chrome.manifest</li>
- <li>File: bootstrap.js</li>
- <li>Folder: locale
- <ol>
- <li>Folder: VALID_LOCALE_HERE
- <ol>
- <li>File: ANYTHING.properties</li>
- </ol>
- </li>
- </ol>
- </li>
-</ol>
-
-<p>In the locale folder you must have folders for each of the languages you want to provide; each folder must be named a valid locale (ex: en-US). Inside this folder must be a property file. Inside the chrome.manifest file these locale must be defined. For example if you had a subfolder of en-US in locale folder your chrome.manifest file will have to contain: <code>locale NAME_OF_YOUR_ADDON en-US locale/en-US/</code></p>
-
-<p>Here is an example: <a href="https://github.com/Noitidart/l10n/tree/properties">GitHub :: l10n-properties</a> - on startup of this add-on it will show a prompt saying USA or Great Britain, which ever it deems closest to your locale. You can test different locale by going to about:config and changing preference of general.useragent.locale to en-US and then to en-GB and disabling then re-enabling the add-on.</p>
-
-<h3 id="XUL_and_HTML_Files_-_Using_Entities_from_DTD_Files">XUL and HTML Files - Using Entities from DTD Files</h3>
-
-<p>Many times HTML pages are used, however they cannot be localized with DTD files. There are three changes you must make:</p>
-
-<ol>
- <li>You have to change the HTML file's extension to be <code>.xhtml</code></li>
- <li>The doctype must be defined point to a DTD file in your locale folder such as: <code>&lt;!DOCTYPE html SYSTEM <span class="pl-s1">"chrome://l10n/locale/mozilla.dtd"</span>&gt;</code></li>
- <li>Must add xmlns attribute to html tag for example: <code>&lt;<span class="pl-ent">html</span> <span class="pl-e">xmlns</span>=<span class="pl-s1"><span class="pl-pds">"</span>http://www.w3.org/1999/xhtml<span class="pl-pds">"</span></span>&gt;</code></li>
- <li>If you have multiple DTD files read on here: <a href="https://developer.mozilla.org/en-US/docs/Using_multiple_DTDs">Using multiple DTDs</a></li>
-</ol>
-
-<p>The bare minimum needed is:</p>
-
-<ol>
- <li>File: install.rdf</li>
- <li>File: chrome.manifest</li>
- <li>File: bootstrap.js</li>
- <li>Folder: locale
- <ol>
- <li>Folder: VALID_LOCALE_HERE
- <ol>
- <li>File: ANYTHING.dtd</li>
- </ol>
- </li>
- </ol>
- </li>
-</ol>
-
-<p>The chrome.manifest file must include a definition for content for example: <code>content NAME_OF_YOUR_ADDON ./</code></p>
-
-<p>The chrome.manifest file must also include a line pointing to the locale, just like in the above property section, if you had a folder named en-US in locale, the chrome.manifest file should contain: <code>locale NAME_OF_YOUR_ADDON en-US locale/en-US/</code></p>
-
-<p>Here is an example add-on that opens an HTML page and a XUL page on install: <a href="https://github.com/Noitidart/l10n/tree/c456cc82a8a66b6d552cd8c2299cd2babc383af0">GitHub :: l10n-xhtml-xul</a>. Here is an example showing how to use a localized HTML page as an options page: <a href="https://github.com/Noitidart/l10n/tree/html-options">GitHub :: l10n-html-options</a>. You can go to about:config and change the value of the preference <code>general.useragent.locale </code>to <code>en-US</code> and then to <code>en-GB</code> and then reload the open pages to see the localization change.</p>
-
-<h2 id="参考資料">参考資料</h2>
-
-<ul>
- <li>Wladimir Palant さんが、<a class="external" href="http://adblockplus.org/blog/how-many-hacks-does-it-take-to-make-your-extension-install-without-a-restart">既存の拡張機能を書き換える際に発見した問題やバグ</a> を、解決策や回避策とともに解説しています。</li>
- <li>Mark Finkle さんが、<a class="external" href="http://starkravingfinkle.org/blog/2011/01/bootstrap-jones-adventures-in-restartless-add-ons/">Android 版 Firefox 用ブートストラップ型拡張機能</a> の簡単なサンプルコードを提供しており、ブートストラップ型拡張機能に <a class="external" href="http://starkravingfinkle.org/blog/2011/01/restartless-add-ons-more-resources/">(オプションウィンドウなどの) リソースを追加する方法</a> や、<code>default/preferences/prefs.js</code> ファイルを使わずに <a class="external" href="http://starkravingfinkle.org/blog/2011/01/restartless-add-ons-%e2%80%93-default-preferences/">デフォルト設定を追加する方法</a> について説明しています。</li>
- <li>Kris Maglione さんが、ブートストラップ型拡張機能における <a class="external" href="http://maglione-k.users.sourceforge.net/bootstrapped.xhtml">クリーンアップ手順の必要事項</a> についての記事を書いています。</li>
- <li>Edward Lee さんが、自作ブートストラップ型拡張機能に使える <a class="external" href="http://ed.agadak.net/2011/01/restartless-add-on-example-code">役に立つコーディングパターンやサンプル</a> を提供しています。</li>
- <li>Erik Vold さんのブートストラップ型拡張機能チュートリアル:
- <ul>
- <li><a class="external" href="http://erikvold.com/blog/index.cfm/2010/11/3/restartless-restart-addon-for-firefox">Part 1: Introduction</a></li>
- <li><a class="external" href="http://erikvold.com/blog/index.cfm/2011/1/2/restartless-firefox-addons-part-2-includes">Part 2: Includes</a></li>
- <li><a class="external" href="http://erikvold.com/blog/index.cfm/2011/2/7/restartless-firefox-addons-part-3-icons">Part 3: Icons</a></li>
- <li><a class="external" href="http://erikvold.com/blog/index.cfm/2011/2/18/restartless-firefox-addons-part-4-localization-l10n">Part 4: Localization (l10n)</a></li>
- <li><a class="external" href="http://erikvold.com/blog/index.cfm/2011/4/1/restartless-firefox-addons-part-5-logging">Part 5: Logging</a></li>
- <li><a class="external" href="http://erikvold.com/blog/index.cfm/2011/6/14/restartless-firefox-addons-part-6-better-includes">Part 6: Better Includes</a></li>
- <li><a class="external" href="http://erikvold.com/blog/index.cfm/2011/6/19/restartless-firefox-addons-part-7-css">Part 7: CSS</a></li>
- <li><a class="external" href="http://erikvold.com/blog/index.cfm/2011/6/19/restartless-firefox-addons-part-8-require-commonjs-and-jetpack">Part 8: Require, CommonJS, and Jetpack</a></li>
- </ul>
- </li>
- <li>Firefox 7 以上で使用可能な <a href="/ja/docs/Extensions/Inline_Options">インラインオプション</a> の記事も参照してください。</li>
-</ul>
-
-<h3 id="日本語の参考資料">日本語の参考資料</h3>
-
-<ul>
- <li>Piro さんによる <a href="http://piro.sakura.ne.jp/xul/doc/20101120fxdevcon/">Jetpack に乗っかれないロートルのための再起動いらずなアドオンの作り方 ~ Bootstrapped Add-on 詳説~</a>、<a href="http://www.mozilla.jp/videos/events/devcon/2010/6b-bootstrapped-addons/">同プレゼン録画</a> と <a href="https://github.com/piroor/restartless">ブートストラップ型拡張機能テンプレート</a></li>
- <li>Gomita さんによる <a href="http://www.xuldev.org/misc/docs/modest14/">Android 版 Firefox アドオン開発事始め</a></li>
- <li>書籍「<a href="http://firefoxhacks.org/">Firefox Hacks Rebooted</a>」</li>
-</ul>