aboutsummaryrefslogtreecommitdiff
path: root/files/ja/mozilla/javascript_code_modules
diff options
context:
space:
mode:
authorPeter Bengtsson <mail@peterbe.com>2020-12-08 14:40:17 -0500
committerPeter Bengtsson <mail@peterbe.com>2020-12-08 14:40:17 -0500
commit33058f2b292b3a581333bdfb21b8f671898c5060 (patch)
tree51c3e392513ec574331b2d3f85c394445ea803c6 /files/ja/mozilla/javascript_code_modules
parent8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff)
downloadtranslated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.gz
translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.bz2
translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.zip
initial commit
Diffstat (limited to 'files/ja/mozilla/javascript_code_modules')
-rw-r--r--files/ja/mozilla/javascript_code_modules/components.utils.unload/index.html43
-rw-r--r--files/ja/mozilla/javascript_code_modules/ctypes.jsm/index.html199
-rw-r--r--files/ja/mozilla/javascript_code_modules/deferredtask.jsm/index.html153
-rw-r--r--files/ja/mozilla/javascript_code_modules/downloads.jsm/index.html297
-rw-r--r--files/ja/mozilla/javascript_code_modules/index.html113
-rw-r--r--files/ja/mozilla/javascript_code_modules/perfmeasurement.jsm/index.html302
-rw-r--r--files/ja/mozilla/javascript_code_modules/popupnotifications.jsm/index.html213
-rw-r--r--files/ja/mozilla/javascript_code_modules/using/index.html208
8 files changed, 1528 insertions, 0 deletions
diff --git a/files/ja/mozilla/javascript_code_modules/components.utils.unload/index.html b/files/ja/mozilla/javascript_code_modules/components.utils.unload/index.html
new file mode 100644
index 0000000000..cea96fd101
--- /dev/null
+++ b/files/ja/mozilla/javascript_code_modules/components.utils.unload/index.html
@@ -0,0 +1,43 @@
+---
+title: Components.utils.unload
+slug: Mozilla/JavaScript_code_modules/Components.utils.unload
+tags:
+ - Modules
+translation_of: Mozilla/Tech/XPCOM/Language_Bindings/Components.utils.unload
+---
+<p>{{ Gecko_minversion_header("7.0") }}</p>
+
+<p><code><a href="/ja/docs/Components.utils">Components.utils</a>.unload</code> は<a href="/ja/Firefox_7_for_developers" title="ja/Firefox_7_for_developers">Firefox 7</a> で導入され、 <a href="/ja/JavaScript_code_modules" title="ja/JavaScript code modules">JavaScript コードモジュール</a>をアンロードするために使用されています。これは特に<a href="/ja/Extensions/Bootstrapped_extensions" title="ja/Extensions/Bootstrapped_extensions">再起動不要な(ブートストラップ型)拡張機能</a>において、新しいバージョンの拡張機能をインストールするときに古いバージョンのコードモジュールをアンロードしたいときに便利です。</p>
+
+<p>このメソッドが呼び出されると、モジュールへの参照は引き続き機能しますが、それ以降にモジュールがインポートされるとリロードして新しい参照を与えます。 JavaScript コードモジュールがまだインポートされていない場合、このメソッドは何も行いません。</p>
+
+<p>アプリケーションの一部であるモジュール(<code><a class="external" rel="freelink">resource://gre/</a></code> や <code>resource:///</code> や <code><a class="external" rel="freelink">resource://app/</a></code>)は、他の拡張機能やアプリケーションによって利用されている可能性があるので、アンロードするべきではありません。拡張機能の一部としてインクルードしたモジュールのみをアンロードしてください。</p>
+
+<h3 id="Syntax" name="Syntax">構文</h3>
+
+<pre>Components.utils.unload( <em>url</em> );
+</pre>
+
+<h3 id="Parameters" name="Parameters">引数</h3>
+
+<dl>
+ <dt><code>url</code></dt>
+ <dd>アンロードするスクリプトの "resource://" で始まる URL です。スクリプトをロードするために使用したものと同じ URL である必要があります。</dd>
+</dl>
+
+<h3 id="Example" name="Example">例</h3>
+
+<p>以下の1行のコードで、 MyModule.jsm と呼ばれるモジュールをアンロードできます。</p>
+
+<pre class="eval">Components.utils.unload("<span class="nowiki">resource://myaddon/modules/MyModule.jsm</span>");
+</pre>
+
+<div class="note"><strong>注:</strong> 現在、 Components.utils.unload clears はアンロードするモジュールのグローバルオブジェクトをクリアします。これによってアンロードにそれらへの参照を使用すると、モジュールが誤動作する可能性があります。 {{ bug("769253") }} を参照してください。</div>
+
+<h3 id="See_also" name="See_also">関連情報</h3>
+
+<ul>
+ <li>{{ bug("481603") }}</li>
+ <li>{{ Source("js/xpconnect/idl/xpccomponents.idl", "xpccomponents.idl") }} のドキュメント</li>
+ <li>{{ Source("js/xpconnect/tests/unit/") }} のテスト</li>
+</ul>
diff --git a/files/ja/mozilla/javascript_code_modules/ctypes.jsm/index.html b/files/ja/mozilla/javascript_code_modules/ctypes.jsm/index.html
new file mode 100644
index 0000000000..a1a61b823b
--- /dev/null
+++ b/files/ja/mozilla/javascript_code_modules/ctypes.jsm/index.html
@@ -0,0 +1,199 @@
+---
+title: ctypes.jsm
+slug: Mozilla/JavaScript_code_modules/ctypes.jsm
+tags:
+ - 要更新
+---
+<div>{{gecko_minversion_header("2.0")}}</div>
+<div class="note">
+ <strong>註:</strong> <code>ctypes.jsm</code> コードモジュールは機能性の強化のために API 改訂中です。よってこの文書はそれが完了した際に改訂されるでしょう。</div>
+<p><code>ctypes.jsm</code> JavaScript コードモジュールは、自前のバイナリ XPCOM コンポーネントを書くことなく JavaScript コードから C 互換な外部ライブラリ関数の呼び出しを可能にします。</p>
+<div class="note">
+ <strong>註:</strong> <code>ctypes.jsm</code> JavaScript コードモジュールは chrome ――つまり、アプリケーション自身またはアドオンの内部からだけ利用することができます。</div>
+<p>ctypes を利用するにはまず、 JavaScript スコープの中にコードモジュールをインポートする必要があります:</p>
+<pre><span class="nowiki">Components.utils.import("resource://gre/modules/ctypes.jsm")</span></pre>
+<p>一度モジュールをインポートしたら、あとは外部ライブラリを読み込むために利用することができます。</p>
+<h2 id=".E3.83.A9.E3.82.A4.E3.83.96.E3.83.A9.E3.83.AA.E3.82.92.E9.96.8B.E3.81.8F" name=".E3.83.A9.E3.82.A4.E3.83.96.E3.83.A9.E3.83.AA.E3.82.92.E9.96.8B.E3.81.8F">ライブラリを開く</h2>
+<p>外部ライブラリを利用する前に、開く必要があります。これは <code>ctypes.open()</code> 関数を用いて行います。</p>
+<pre>var lib = ctypes.open(name);
+</pre>
+<p>ライブラリ <code>name</code> はパス名の文字列、または {{interface("nsILocalFile")}} オブジェクトのどちらかで指定できます。</p>
+<p>ライブラリが無事に読み込まれると、<code>ctypes.open()</code> は節「<a href="/ja/docs/JavaScript_code_modules/ctypes.jsm#.e3.83.a9.e3.82.a4.e3.83.96.e3.83.a9.e3.83.aa.e3.82.aa.e3.83.96.e3.82.b8.e3.82.a7.e3.82.af.e3.83.88.e3.81.ae.e5.88.a9.e7.94.a8">ライブラリオブジェクトの利用</a>」で説明されるライブラリオブジェクトを返します。ライブラリの読み込みに失敗すると、 <code>null</code> を返します。</p>
+<h2 id=".E3.83.A9.E3.82.A4.E3.83.96.E3.83.A9.E3.83.AA.E3.82.AA.E3.83.96.E3.82.B8.E3.82.A7.E3.82.AF.E3.83.88.E3.81.AE.E5.88.A9.E7.94.A8" name=".E3.83.A9.E3.82.A4.E3.83.96.E3.83.A9.E3.83.AA.E3.82.AA.E3.83.96.E3.82.B8.E3.82.A7.E3.82.AF.E3.83.88.E3.81.AE.E5.88.A9.E7.94.A8">ライブラリオブジェクトの利用</h2>
+<p>一度ライブラリが開かれたら、<code>アクセスしたい</code><code>あらゆる関数</code><code>を</code>ライブラリオブジェクトの <code>declare() メソッドを呼び出すことで</code><code>宣言する必要があります。</code></p>
+<pre>var func = lib.declare(name, abi, returnType, argType1, ...)
+</pre>
+<dl>
+ <dt>name</dt>
+ <dd>宣言する関数の名前。これは開いたライブラリの中で妥当なシンボルでなければならない。</dd>
+ <dt>abi</dt>
+ <dd>利用する呼び出しの取り決め。通常これは <code>ctypes.default_abi</code> になるが、関数が Win32 API の場合は <code>ctypes.stdcall_abi</code> を利用する必要がある。</dd>
+ <dt>returnType</dt>
+ <dd>関数が返す型。これは<a href="/ja/docs/JavaScript_code_modules/ctypes.jsm#.e5.9e.8b.e5.ae.9a.e6.95.b0">型定数</a>の一つでなければならない。</dd>
+ <dt>argType1...</dt>
+ <dd>入力引数型の 0 個以上のリスト。これらは<a href="/ja/docs/JavaScript_code_modules/ctypes.jsm#.e5.9e.8b.e5.ae.9a.e6.95.b0">型定数</a>から選ばれなければならない。</dd>
+</dl>
+<p>一度ライブラリから関数が宣言されたら、ほかの関数と同様に呼び出すことができます。</p>
+<p>ライブラリの利用を終えたら、その <code>close()</code> メソッドを呼んで閉じる必要があります:</p>
+<pre>lib.close();
+</pre>
+<h2 id=".E5.9E.8B.E5.AE.9A.E6.95.B0" name=".E5.9E.8B.E5.AE.9A.E6.95.B0">型定数</h2>
+<p>次の定数は ctypes で対応しているデータ型を定義しています。</p>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td class="header">定数</td>
+ <td class="header">説明</td>
+ </tr>
+ <tr>
+ <td><code>ctypes.void_t</code></td>
+ <td>返り型でのみ可能。なにも返さないことを示す。</td>
+ </tr>
+ <tr>
+ <td>ctypes.bool</td>
+ <td>8 ビット真偽値</td>
+ </tr>
+ <tr>
+ <td>ctypes.int8_t</td>
+ <td>8 ビット符号付き整数</td>
+ </tr>
+ <tr>
+ <td>ctypes.int16_t</td>
+ <td>16 ビット符号付き整数</td>
+ </tr>
+ <tr>
+ <td>ctypes.int32_t</td>
+ <td>32 ビット符号付き整数</td>
+ </tr>
+ <tr>
+ <td>ctypes.int64_t</td>
+ <td>64 ビット符号付き整数</td>
+ </tr>
+ <tr>
+ <td>ctypes.uint8_t</td>
+ <td>8 ビット符号なし整数</td>
+ </tr>
+ <tr>
+ <td>ctypes.uint16_t</td>
+ <td>16 ビット符号なし整数</td>
+ </tr>
+ <tr>
+ <td>ctypes.uint32_t</td>
+ <td>32 ビット符号なし整数</td>
+ </tr>
+ <tr>
+ <td>ctypes.uint64_t</td>
+ <td>64 ビット符号なし整数</td>
+ </tr>
+ <tr>
+ <td>ctypes.float</td>
+ <td>浮動小数点数</td>
+ </tr>
+ <tr>
+ <td>ctypes.double</td>
+ <td>倍精度浮動小数点数</td>
+ </tr>
+ <tr>
+ <td>ctypes.string</td>
+ <td>C 文字列 (<code>char *</code>)</td>
+ </tr>
+ <tr>
+ <td>ctypes.ustring</td>
+ <td>16 ビット C 文字列 (<code>char16_t *</code>)</td>
+ </tr>
+ </tbody>
+</table>
+<h2 id=".E4.BE.8B.3A_Windows_.E3.83.AB.E3.83.BC.E3.83.81.E3.83.B3.E3.81.AE.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.99" name=".E4.BE.8B.3A_Windows_.E3.83.AB.E3.83.BC.E3.83.81.E3.83.B3.E3.81.AE.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.99">例: Windows ルーチンの呼び出す</h2>
+<p>この例は Win32 API を呼び出すために ctypes を利用する方法を説明します。</p>
+<pre class="brush: js">Components.utils.import("resource://gre/modules/ctypes.jsm");
+
+var lib = ctypes.open("C:\\WINDOWS\\system32\\user32.dll");
+
+/* Declare the signature of the function we are going to call */
+var msgBox = lib.declare("MessageBoxW",
+ ctypes.stdcall_abi,
+ ctypes.int32_t,
+ ctypes.int32_t,
+ ctypes.ustring,
+ ctypes.ustring,
+ ctypes.int32_t);
+var MB_OK = 3;
+
+var ret = msgBox(0, "Hello world", "title", MB_OK);
+
+lib.close();</pre>
+<p>3行目で、<code>user32.dll</code> システムライブラリが読み込まれています。6 行目は Windows 関数 <a href="http://msdn.microsoft.com/ja-jp/library/ms645505%28VS.85%29.aspx"><code>MessageBoxW</code></a> を呼び出すメソッドとなる <code>msgBox()</code> を宣言しています。15 行目は <code>msgBox()</code> ルーチンを呼び、警告を表示します。</p>
+<p>利用を終えたら私たちが最後に行うのは、ライブラリを閉じるために <code>lib.close()</code> を呼び出すことです。</p>
+<p>パスすべてを定義するのではなく、単にファイル名を与えることもできます。</p>
+<pre>var lib = ctypes.open("user32.dll");
+</pre>
+<p>あるいは拡張子抜きで。</p>
+<pre>var lib = ctypes.open("user32");
+</pre>
+<p>フルパスが与えられなかった場合、Windows は DLL 探すために次の検索順を利用します:</p>
+<ol>
+ <li>アプリケーションが読み込まれたディレクトリ。</li>
+ <li>システムディレクトリ。</li>
+ <li>16 ビットシステムディレクトリ。</li>
+ <li>Windows ディレクトリ。</li>
+ <li>現在のディレクトリ。</li>
+ <li><code>PATH</code> 環境変数に載っているディレクトリ。</li>
+</ol>
+<p>(<a href="http://msdn.microsoft.com/ja-JP/library/ms682586%28VS.85%29.aspx">http://msdn.microsoft.com/ja-jp/library/ms682586%28VS.85%29.aspx</a> より)</p>
+<h2 id=".E4.BE.8B.3A_Mac_OS_X_.E3.81.A7_Carbon_.E3.83.AB.E3.83.BC.E3.83.81.E3.83.B3.E3.81.AE.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.99" name=".E4.BE.8B.3A_Mac_OS_X_.E3.81.A7_Carbon_.E3.83.AB.E3.83.BC.E3.83.81.E3.83.B3.E3.81.AE.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.99">例: Mac OS X で Carbon ルーチンの呼び出す</h2>
+<p>この例は Mac OS X で Carbon 関数を呼び出すために ctypes を利用する方法を説明します。</p>
+<pre class="brush: js">/* build a Str255 ("Pascal style") string from the passed-in string */
+
+function makeStr(str) {
+ return String.fromCharCode(str.length) + str;
+}
+
+Components.utils.import("resource://gre/modules/ctypes.jsm");
+
+var carbon = ctypes.open("/System/Library/Frameworks/Carbon.framework/Carbon");
+
+stdAlert = carbon.declare("StandardAlert", /* function name */
+ ctypes.default_abi, /* ABI type */
+ ctypes.int16_t, /* return type */
+ ctypes.int16_t, /* alert type */
+ ctypes.string, /* primary text */
+ ctypes.string, /* secondary text */
+ ctypes.uint32_t, /* alert param */
+ ctypes.int16_t); /* item hit */
+
+var hit = 0;
+var msgErr = makeStr("Carbon Says...");
+var msgExp = makeStr("We just called the StandardAlert Carbon function from JavaScript!");
+
+var err = stdAlert(1, msgErr, msgExp, 0, hit);
+
+carbon.close();
+</pre>
+<p>The <code>makeStr()</code> 関数は入力として標準の JavaScript 文字列を取り、バイト長の後に文字列そのものの文字が続く Carbon 形式の「Pascal」文字列を返すユーティリティルーチンです。これは文字列が実際に 256 文字以下の場合にだけ正しく動作することを忘れないでください。 長い場合は見事に失敗します。</p>
+<p>9 行目で、システムの Carbon フレームワークから Carbon ライブラリが読み込まれています。</p>
+<p>11 行目は Carbon の <code>StandardAlert</code> ルーチンを呼び出す、<code>stdAlert()</code> 関数を宣言しています。既定の ABI を利用し、 16 ビット整数 (Carbon の <code>OSErr</code> 値) を返し、そして整数(警告タイプ)と 2 つの文字列、私たちは利用しないパラメータブロックへのポインタ、ヒットした項目を返すために用いるもう 1 つの整数を受け入れます。詳しくは <a href="http://developer.apple.com/legacy/mac/library/documentation/Carbon/Reference/Dialog_Manager/Reference/reference.html#//apple_ref/c/func/StandardAlert"><code>StandardAlert</code></a> に関する Apple の文書を参照してください。</p>
+<p>その後、私たちは必要な Str255 文字列を 2 つ生成するために <code>makeStr() を用いて単にパラメータを構成し、<code>stdAlert()</code> を呼び出すと、次の警告ウィンドウが作り出されます:</code></p>
+<p><img alt="ctype-mac-dialog.png" class="internal default" src="/@api/deki/files/3842/=ctype-mac-dialog.png"></p>
+<p>利用を終えたら私たちが最後に行うのは、ライブラリを閉じるために <code>carbon.close()</code> を呼び出すことです。</p>
+<h2 id=".E4.BE.8B.3A_Linux_.E3.81.A7_LibC_.E3.83.AB.E3.83.BC.E3.83.81.E3.83.B3.E3.81.AE.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.99" name=".E4.BE.8B.3A_Linux_.E3.81.A7_LibC_.E3.83.AB.E3.83.BC.E3.83.81.E3.83.B3.E3.81.AE.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.99">例: Linux で LibC ルーチンの呼び出す</h2>
+<p>この例は Linux で libc 関数を呼び出すために ctypes を利用する方法を説明します。</p>
+<pre class="brush: js">/* import js-ctypes */
+Components.utils.import("resource://gre/modules/ctypes.jsm");
+
+/* open a library */
+var libc = ctypes.open("libc.so.6");
+
+/* import a function */
+var puts = libc.declare("puts", /* function name */
+ ctypes.default_abi, /* call ABI */
+ ctypes.int32_t, /* return type */
+ ctypes.string /* argument type */
+);
+var ret = puts("Hello World from js-ctypes!");
+</pre>
+<h2 id=".E9.96.A2.E9.80.A3.E9.A0.85.E7.9B.AE" name=".E9.96.A2.E9.80.A3.E9.A0.85.E7.9B.AE">関連項目</h2>
+<ul>
+ <li><a href="/ja/docs/JavaScript_code_modules/Using">Using JavaScript code modules</a></li>
+ <li><a href="/ja/docs/JavaScript_code_modules">JavaScript code modules</a></li>
+ <li><a href="/ja/docs/Components.utils.import"><code>Components.utils.import</code></a></li>
+</ul>
diff --git a/files/ja/mozilla/javascript_code_modules/deferredtask.jsm/index.html b/files/ja/mozilla/javascript_code_modules/deferredtask.jsm/index.html
new file mode 100644
index 0000000000..91a3dad875
--- /dev/null
+++ b/files/ja/mozilla/javascript_code_modules/deferredtask.jsm/index.html
@@ -0,0 +1,153 @@
+---
+title: DeferredTask.jsm
+slug: Mozilla/JavaScript_code_modules/DeferredTask.jsm
+tags:
+ - JavaScript
+ - Modules
+translation_of: Mozilla/JavaScript_code_modules/DeferredTask.jsm
+---
+<p>{{ gecko_minversion_header("18.0") }}</p>
+<p>{{ Fx_minversion_note("28.0", "Firefox 28 でインターフェースの変更があり、古いメソッドは削除されました。") }}</p>
+<p><code>{{ Source("toolkit/modules/DeferredTask.jsm", "DeferredTask.jsm") }}</code> JavaScript コードモジュールは、遅延後に実行するタスクのためのユーティリティルーチンを提供します。遅延前に実行が試みられる複数の同じタスクは一本化されます。このモジュールを使用するには、先にコードモジュールをあなたの JavaScript スコープにインポートしておく必要があります:</p>
+<pre>Components.utils.import("resource://gre/modules/DeferredTask.jsm");
+</pre>
+<p>このモジュールは、例えば、ファイルにデータを書き込み、そのすぐ後に再びデータを書き込む可能性がある場合に使用できます。<code>DeferredTask</code> でタスクに数ミリ秒間の遅延を起こし、データへの新しい変更をその間に行ってください。</p>
+<ul>
+ <li>データの最終バージョンのみが実際に書き込まれます。</li>
+ <li>他の変更を考慮していくらかの猶予の遅延が追加されます。</li>
+</ul>
+<p>{{ h1_gecko_minversion("DeferredTask コンストラクタ", "18.0") }}</p>
+<p>2 秒間遅らせたい関数呼び出しがある場合、<code>DeferredTask</code> コンストラクタを使用して次のようにしてください:</p>
+<pre>var task = new DeferredTask(myFunction, 2000);
+</pre>
+<p>{{ fx_minversion_inline("28.0") }} 第一引数にはジェネレータ関数を渡す事もできます。</p>
+<h2 id="Method_overview" name="Method_overview">メソッドの概要</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td><code>bool <a href="#isPending()">isPending</a>();</code> {{ obsolete_inline("28.0") }}</td>
+ </tr>
+ <tr>
+ <td><code>void <a href="#start()">start</a>();</code> {{ obsolete_inline("28.0") }}</td>
+ </tr>
+ <tr>
+ <td><code>void <a href="#flush()">flush</a>();</code> {{ obsolete_inline("28.0") }}</td>
+ </tr>
+ <tr>
+ <td><code>void <a href="#cancel()">cancel</a>();</code> {{ obsolete_inline("28.0") }}</td>
+ </tr>
+ <tr>
+ <td><code>void <a href="#arm()">arm</a>();</code> {{ gecko_minversion_inline("28.0") }}</td>
+ </tr>
+ <tr>
+ <td><code>void <a href="#disarm()">disarm</a>();</code> {{ gecko_minversion_inline("28.0") }}</td>
+ </tr>
+ <tr>
+ <td><code>Promise <a href="#finalize()">finalize</a>();</code> {{ gecko_minversion_inline("28.0") }}</td>
+ </tr>
+ </tbody>
+</table>
+<h2 id="Attributes" name="Attributes">属性</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td><code>isArmed</code></td>
+ <td><code><a href="/en/boolean" title="en/boolean">boolean</a></code></td>
+ <td>このタスクが開始を要求されているかどうかを表します。この値はタスクが現在実行中であるかどうかとは関係ありません。 {{ gecko_minversion_inline("28.0") }}</td>
+ </tr>
+ <tr>
+ <td><code>isRunning</code></td>
+ <td><code><a href="/en/boolean" title="en/boolean">boolean</a></code></td>
+ <td>このタスクが現在実行中であるかどうかを表します。タスクの関数内からこの値を取得した場合常に true ですが、タスクが非同期のジェネレータ関数の場合、外部のコードから取得しても true です。 {{ gecko_minversion_inline("28.0") }}</td>
+ </tr>
+ </tbody>
+</table>
+<h2 id="Methods" name="Methods">メソッド</h2>
+<h3 id="isPending()" name="isPending()">isPending</h3>
+<p>{{ obsolete_inline("28.0") }}</p>
+<p>現在のタスク状態を確認します。</p>
+<pre class="eval">bool isPending();
+</pre>
+<h6 id="Return_value" name="Return_value">戻り値</h6>
+<p>未実行の場合は <code>true</code>、そうでない場合は <code>false</code> を返します。</p>
+<h3 id="start()" name="start()">start</h3>
+<p>{{ obsolete_inline("28.0") }}</p>
+<p>タスクを開始 (または延期) します。</p>
+<pre class="eval">void start();
+</pre>
+<h3 id="flush()" name="flush()">flush</h3>
+<p>{{ obsolete_inline("28.0") }}</p>
+<p>延期したタスクをすぐに実行します。</p>
+<pre class="eval">void flush();
+</pre>
+<h3 id="cancel()" name="cancel()">cancel</h3>
+<p>{{ obsolete_inline("28.0") }}</p>
+<p>未実行のタスクをキャンセルします。</p>
+<pre class="eval">void cancel();
+</pre>
+<h3 id="arm()" name="arm()">arm</h3>
+<p>{{ gecko_minversion_inline("28.0") }}</p>
+<p>タスク構築時に指定した遅延の後、タスクを実行する事を要求します。複数回の呼び出しは追加の遅延を引き起こしません。タスクが実行中である場合、現在の実行の終了後から遅延が開始されます。</p>
+<p>タスク構築時に遅延が 0 に指定されていたとしても、タスクは常にイベントループの異なる瞬間に実行されます。イベントループ中の同じ瞬間における複数回の "arm" の呼び出しは、一回のタスクの実行となる事が保証されます。</p>
+<p>設計では、このメソッドは呼び出し側に対し、次の実行がいつ終了するかを検出する手段や結果を取得する手段を提供しません。実際、これを行う事は往々にして重複処理やログ取得となります。タスクの完了時に特殊な処理やエラーログが必要であれば、タスク中で try/catch/finally 節等を用いてタスク自身が行う方が良いでしょう。"finalize" メソッドは一般的にはシャットダウン時に完了を待つ時に使われます。</p>
+<pre class="eval">void arm();
+</pre>
+<h3 id="disarm()" name="disarm()">disarm</h3>
+<p>{{ gecko_minversion_inline("28.0") }}</p>
+<p>このタスクの遅延された実行の要求をキャンセルします。ただし既に実行中のタスクはキャンセルできません。</p>
+<p>このメソッドは現在実行中のタイマーを停止させます。このため、再度 "arm" メソッドを呼び出した場合、遅延はタスク構築時に指定された元の値から開始されます。</p>
+<pre class="eval">void disarm();
+</pre>
+<h3 id="finalize()" name="finalize()">finalize</h3>
+<p>{{ gecko_minversion_inline("28.0") }}</p>
+<p>保留中のタスクを即座に実行し、最後まで実行される事を保証します。これ以降のタイマーの arm は阻止されます。</p>
+<ul>
+ <li>もしタスクが実行中で、タイマーが arm されている場合、現在のタスクの実行が完了した直後、即座にもう一度タスクが実行され、この後に返り値の promise が解決します。</li>
+ <li>もしタスクが実行中で、タイマーが arm されていない場合、返り値の promise は現在の実行が完了した時に解決されます。</li>
+ <li>もしタスクが実行中ではなく、タイマーが arm されている場合、タスクが即座に開始され、返り値の promise はこの新しい実行が完了した時に解決されます。</li>
+ <li>もしタスクが実行中ではなく、タイマーが arm されていない場合、このメソッドは解決済みの promise を返します。</li>
+</ul>
+<pre class="eval">Promise finalize();
+</pre>
+<h2 id="Example" name="Example">例</h2>
+<p>{{ Fx_minversion_note("28.0", "この節は Firefox 28.0 以降の DeferredTask.jsm について書かれています。") }}</p>
+<p>指定された遅延の後に実行される関数または非同期のタスクを作成します。遅延が経過する前の複数回の "arm" メソッド呼び出しは結合されます。タスクは実行中に再入する事はできませんが、前回の実行が完了した後で再度実行する事はできます。</p>
+<p> </p>
+<p>一般的な使用例は、短期間における複数回の非同期呼び出しによってデータが変更され、その度にファイルに保存しなければいけない場合です。</p>
+<pre class="eval">let saveDeferredTask = new DeferredTask(function* () {
+ yield OS.File.writeAtomic(...);
+ // 補足されない例外は報告されます
+}, 2000);
+
+// このタスクは準備完了ですが、要求されるまで実行はされません
+</pre>
+<p>"arm" メソッドは、タスクを実行する内部タイマーを開始するのに使用します。複数回のタイマーの arm は追加の遅延を引き起こしません。</p>
+<pre class="eval">saveDeferredTask.arm();
+
+// タスクはこの時点から 2 秒後に実行されます
+
+yield waitOneSecond();
+saveDeferredTask.arm();
+
+// タスクはこの時点から 1 秒後に実行されます
+</pre>
+<p>タイマーは遅延をリセットするため、もしくは単純に実行をキャンセルするために arm を解除できます。</p>
+<pre class="eval">saveDeferredTask.disarm();
+saveDeferredTask.arm();
+
+// タスクはこの時点から 2 秒後に実行されます
+</pre>
+<p>指定時間が経過し内部タイマーが発動するとタスクの実行が開始され、このタスクはこれ以降キャンセルできなくなります。しかし、タスクの実行中にタイマーを再び arm する事は可能であり、この場合タイマーが実際に開始するには前のタスクが完了する必要があります。このため、タスクの実行と実行の間の休止時間は指定された遅延以上である事が保証されます。</p>
+<p>"finalize" メソッドはタスクが確実に終了する事を保証するために使用できます。このメソッドが返した promise はタスクの最後の実行が完了した時に解決されます。タスクの実行が最後である事を保証するために、このメソッドは以降再びタイマーを arm する事を拒否します。</p>
+<p>"finalize" メソッドが呼び出された時点でタイマーが既に arm されていた場合、タスクは即座に実行されます。この時点でタスクが既に実行されていた場合、現在の実行が終了し次第、即座に最後の実行が始めから終わりまで再び行なわれます。もしタイマーが arm されていなかった場合、"finalize" メソッドは実行中のタスクが完了する事を保証します。</p>
+<p>例えばシャットダウン中に、もしタイマーが arm されていた場合、最新バージョンのデータを用いた保留中の書き込みが処理される事を保証したいでしょう。</p>
+<pre class="eval">AsyncShutdown.profileBeforeChange.addBlocker(
+ "Example service: shutting down",
+ () =&gt; saveDeferredTask.finalize()
+);
+</pre>
+<p>しかし、どのみち保存されたデータをディスクから削除しようとしている場合、むしろ保留されている書き込みの開始を抑制した方が良いでしょう。ただし、削除しようとしているファイルが使用中ではなくなるように、現在処理中の書き込みが終了する事は保証した上で。</p>
+<pre class="eval">saveDeferredTask.disarm();
+saveDeferredTask.finalize().then(() =&gt; OS.File.remove(...))
+ .then(null, Components.utils.reportError);
+</pre>
diff --git a/files/ja/mozilla/javascript_code_modules/downloads.jsm/index.html b/files/ja/mozilla/javascript_code_modules/downloads.jsm/index.html
new file mode 100644
index 0000000000..f01fc476ac
--- /dev/null
+++ b/files/ja/mozilla/javascript_code_modules/downloads.jsm/index.html
@@ -0,0 +1,297 @@
+---
+title: Downloads.jsm
+slug: Mozilla/JavaScript_code_modules/Downloads.jsm
+translation_of: Mozilla/JavaScript_code_modules/Downloads.jsm
+---
+<p>{{ gecko_minversion_header("26") }}</p>
+
+<p>Downloads.jsmはダウンロードに関する機能を提供するJavaScriptモジュールです。新規にダウンロードを開始したり、ダウンロード中に制御を行ったり、ダウンロードに関連する設定を呼び出したりできます。これを使用するにはまずモジュールをインポートする必要があります。</p>
+
+<pre>Components.utils.import("resource://gre/modules/Downloads.jsm");
+</pre>
+
+<h2 id="メソッドの概要">メソッドの概要</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td><code><a href="https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Promise.jsm/Promise" title="/en-US/docs/Mozilla/JavaScript_code_modules/Promise.jsm/Promise">Promise</a>&lt;<a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/Download" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/Download">Download</a>&gt; <a href="#createDownload()">createDownload</a>(<a href="/en-US/docs/JavaScript/Reference/Global_Objects/Object" title="/en-US/docs/JavaScript/Reference/Global_Objects/Object">Object</a> aProperties);</code></td>
+ </tr>
+ <tr>
+ <td><code><a href="https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Promise.jsm/Promise" title="/en-US/docs/Mozilla/JavaScript_code_modules/Promise.jsm/Promise">Promise</a>&lt;void&gt; <a href="#fetch()">fetch</a>(aSource, aTarget, [optional] <a href="/en-US/docs/JavaScript/Reference/Global_Objects/Object" title="/en-US/docs/JavaScript/Reference/Global_Objects/Object">Object</a> </code><code>aOptions);</code></td>
+ </tr>
+ <tr>
+ <td><code><a href="https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Promise.jsm/Promise" title="/en-US/docs/Mozilla/JavaScript_code_modules/Promise.jsm/Promise">Promise</a>&lt;<a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadList" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadList">DownloadList</a>&gt; <a href="#getList()">getList</a>(aType);</code></td>
+ </tr>
+ <tr>
+ <td><code><a href="https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Promise.jsm/Promise" title="/en-US/docs/Mozilla/JavaScript_code_modules/Promise.jsm/Promise">Promise</a>&lt;<a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadSummary" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadSummary">DownloadSummary</a>&gt; <a href="#getSummary()">getSummary</a>(aType);</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="定数">定数</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td class="header">定数</td>
+ <td class="header">説明</td>
+ </tr>
+ <tr>
+ <td><code>PUBLIC</code></td>
+ <td>Work on downloads that were not started from a private browsing window.</td>
+ </tr>
+ <tr>
+ <td><code>PRIVATE</code></td>
+ <td>Work on downloads that were started from a private browsing window.</td>
+ </tr>
+ <tr>
+ <td><code>ALL</code></td>
+ <td>Work on both <code>Downloads.PRIVATE</code> and <code>Downloads.PUBLIC</code> downloads.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="プロパティ">プロパティ</h2>
+
+<table class="standard-table" style="width: auto;">
+ <tbody>
+ <tr>
+ <td class="header">属性</td>
+ <td class="header">型</td>
+ <td class="header">説明</td>
+ </tr>
+ <tr>
+ <td><code>Error</code> <span class="inlineIndicator readOnly readOnlyInline" title="This value may not be changed.">Read only </span></td>
+ <td><a href="/en-US/docs/JavaScript/Guide/Working_with_Objects#Using_a_constructor_function" title="/en-US/docs/JavaScript/Guide/Working_with_Objects#Using_a_constructor_function"><code>Constructor</code></a></td>
+ <td>Constructor for a <a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadError" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadError"><code>DownloadError</code></a> object. When you catch an exception during a download, you can use this to verify if <code>ex instanceof Downloads.Error</code>, before reading the exception properties with the error details. Example (using <a href="/en-US/docs/Mozilla/JavaScript_code_modules/Task.jsm" title="/en-US/docs/Mozilla/JavaScript_code_modules/Task.jsm"><code>Task.jsm</code></a>):
+ <pre class="brush: js">
+try {
+ yield Downloads.fetch(sourceUri, targetFile);
+} catch (ex if ex instanceof Downloads.Error &amp;&amp; ex.becauseTargetFailed) {
+ console.log("Unable to write to the target file, ignoring the error.");
+}</pre>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="メソッド">メソッド</h2>
+
+<h3 id="createDownload()">createDownload()</h3>
+
+<p>新しく<a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/Download" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/Download"><code>Download</code></a>オブジェクトを生成します。</p>
+
+<pre>Promise&lt;Download&gt; createDownload(
+ Object aProperties
+);
+</pre>
+
+<h5 id="パラメーター">パラメーター</h5>
+
+<dl>
+ <dt><code>aProperties</code></dt>
+ <dd>Provides the initial properties for the newly created download. This matches the serializable representation of a <code><a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/Download" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/Download">Download</a></code> object. Some of the most common properties in this object include:
+ <ul>
+ <li><code>source</code>: String containing the URI for the download source. Alternatively, may be an {{Interface("nsIURI")}}, a <a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadSource" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadSource"><code>DownloadSource</code></a> object, or an object with the following properties:
+ <ul>
+ <li><code>url</code>: String containing the URI for the download source.</li>
+ <li><code>isPrivate</code>: {{optional_inline()}} Indicates whether the download originated from a private window. If omitted, the download is public.</li>
+ <li><code>referrer</code>: {{optional_inline()}} String containing the referrer URI of the download source. Can be omitted or <code>null</code> if no referrer should be sent or the download source is not HTTP.</li>
+ </ul>
+ </li>
+ <li><code>target</code>: String containing the path of the target file. Alternatively, may be an {{Interface("nsIFile")}}, a <a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadTarget" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadTarget"><code>DownloadTarget</code></a> object, or an object with the following properties:
+ <ul>
+ <li><code>path</code>: String containing the path of the target file.</li>
+ </ul>
+ </li>
+ <li><code>saver</code>: {{optional_inline()}} String representing the class of the download operation. If omitted, defaults to "copy". Alternatively, may be the serializable representation of a <code>DownloadSaver</code> object.</li>
+ </ul>
+ </dd>
+</dl>
+
+<h5 id="Promise_resolves_to">Promise resolves to</h5>
+
+<p>新しく生成された<a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/Download" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/Download"><code>Download</code></a>オブジェクト.</p>
+
+<h3 id="fetch()">fetch()</h3>
+
+<p>ネットワーク上のデータをローカルにダウンロードします。</p>
+
+<p>この関数はダウンロードをキャンセルしたり再開するインターフェイスを提供していません。その場合は<a href="#createDownload()" title="#createDownload()"><code>createDownload()</code></a>関数を利用して<a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/Download" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/Download"><code>Download</code></a>オブジェクトを参照してください。</p>
+
+<p>ダウンロードは再開されないため、たとえダウンロードが失敗しても部分的にダウンロードデータが保存されることはありません。</p>
+
+<pre>Promise fetch(
+ aSource,
+ aTarget,
+ Object aOptions
+);
+</pre>
+
+<h5 id="パラメーター_2">パラメーター</h5>
+
+<dl>
+ <dt><code>aSource</code></dt>
+ <dd>String containing the URI for the download source. Alternatively, may be an {{Interface("nsIURI")}} or a <a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadSource" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadSource"><code>DownloadSource</code></a> object.</dd>
+ <dt><code>aTarget</code></dt>
+ <dd>String containing the path of the target file. Alternatively, may be an {{Interface("nsIFile")}} or a <a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadTarget" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadTarget"><code>DownloadTarget</code></a> object.</dd>
+ <dt><code>aOptions</code> {{optional_inline()}}</dt>
+ <dd>An optional object used to control the behavior of this function. You may pass an object with a subset of the following fields:
+ <ul>
+ <li><code>isPrivate</code>: {{optional_inline()}} Indicates whether the download originated from a private window. If omitted, the download is public.</li>
+ </ul>
+ </dd>
+</dl>
+
+<h5 id="Promise_resolves_to_2">Promise resolves to</h5>
+
+<p><code>undefined</code> when the download has finished successfully and you can access the target file.</p>
+
+<h5 id="Promise_can_be_rejected_with">Promise can be rejected with</h5>
+
+<p><a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadError" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadError"><code>DownloadError</code></a> if the download failed.</p>
+
+<h3 id="getList()">getList()</h3>
+
+<p>Retrieves the specified type of <a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadList" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadList"><code>DownloadList</code></a> object. There is one download list for each type, and this method always retrieves a reference to the same download list when called with the same argument.</p>
+
+<p>この関数を呼び出すと、ダウンロードリストが(すでにロードされている場合をのぞいて)リロードされます。</p>
+
+<pre>Promise&lt;DownloadList&gt; getList(aType);
+</pre>
+
+<h5 id="パラメーター_3">パラメーター</h5>
+
+<dl>
+ <dt><code>aType</code></dt>
+ <dd>This can be <code>Downloads.PUBLIC</code>, <code>Downloads.PRIVATE</code>, or <code>Downloads.ALL</code>. Downloads added to the <code>Downloads.PUBLIC</code> and <code>Downloads.PRIVATE</code> lists are reflected in the <code>Downloads.ALL</code> list, and downloads added to the <code>Downloads.ALL</code> list are also added to either the <code>Downloads.PUBLIC</code> or the <code>Downloads.PRIVATE</code> list based on their properties.</dd>
+</dl>
+
+<h5 id="Promise_resolves_to_3">Promise resolves to</h5>
+
+<p>The requested <a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadList" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadList"><code>DownloadList</code></a> object.</p>
+
+<h3 id="getSummary()">getSummary()</h3>
+
+<p>Retrieves the specified type of <a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadSummary" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadSummary"><code>DownloadSummary</code></a> object. There is one download summary for each type, and this method always retrieves a reference to the same download summary when called with the same argument.</p>
+
+<p>Calling this function does not cause the list of public downloads to be reloaded from the previous session. The summary will behave as if no downloads are present until the <a href="#getList()" title="#getList()"><code>getList()</code></a> method is called.</p>
+
+<pre>Promise&lt;DownloadSummary&gt; getSummary(aType);
+</pre>
+
+<h5 id="パラメーター_4">パラメーター</h5>
+
+<dl>
+ <dt><code>aType</code></dt>
+ <dd>This can be <code>Downloads.PUBLIC</code>, <code>Downloads.PRIVATE</code>, or <code>Downloads.ALL</code>.</dd>
+</dl>
+
+<h5 id="Promise_resolves_to_4">Promise resolves to</h5>
+
+<p>The requested <a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadSummary" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadSummary"><code>DownloadSummary</code></a> object.</p>
+
+<h2 id="例">例</h2>
+
+<h3 id="ローカルにダウンロードする">ローカルにダウンロードする</h3>
+
+<p>この例では、HTMLファイルをダウンロードしています。ダウンロードの進捗状況を表示したり、エラー処理は行っていません。</p>
+
+<pre class="brush: js">Components.utils.import("resource://gre/modules/Downloads.jsm");
+Components.utils.import("resource://gre/modules/osfile.jsm")
+Components.utils.import("resource://gre/modules/Task.jsm");
+
+Task.spawn(function () {
+
+ yield Downloads.fetch("http://www.mozilla.org/",
+ OS.Path.join(OS.Constants.Path.tmpDir,
+ "example-download.html"));
+
+ console.log("example-download.html has been downloaded.");
+
+}).then(null, Components.utils.reportError);
+</pre>
+
+<h3 id="ダウンロードの監視">ダウンロードの監視</h3>
+
+<p>この例では、グローバルなダウンロードリストに変化が発生するたびに、メッセージを記録しています。</p>
+
+<p>To demonstrate the logging, a new download is started while a message box is being shown. The download is stopped and removed from the list when the message box is closed, regardless of whether it has been completed or not.</p>
+
+<pre class="brush: js">Components.utils.import("resource://gre/modules/Downloads.jsm");
+Components.utils.import("resource://gre/modules/osfile.jsm")
+Components.utils.import("resource://gre/modules/Task.jsm");
+
+Task.spawn(function () {
+
+ let list = yield Downloads.getList(Downloads.ALL);
+
+ let view = {
+ onDownloadAdded: download =&gt; console.log("Added", download),
+ onDownloadChanged: download =&gt; console.log("Changed", download),
+ onDownloadRemoved: download =&gt; console.log("Removed", download)
+ };
+
+ yield list.addView(view);
+ try {
+ let download = yield Downloads.createDownload({
+ source: "http://www.mozilla.org/",
+ target: OS.Path.join(OS.Constants.Path.tmpDir, "example-download.html"),
+ });
+ list.add(download);
+ try {
+ download.start();
+ alert("Now monitoring all downloads. Close the message to stop.");
+ } finally {
+ yield list.remove(download);
+ yield download.finalize(true);
+ }
+ } finally {
+ yield list.removeView(view);
+ }
+
+}).then(null, Components.utils.reportError);
+</pre>
+
+<h2 id="Conversion_from_nsIDownloadManager">Conversion from nsIDownloadManager</h2>
+
+<p>Starting in Firefox for Desktop version 26, the {{interface("nsIDownloadManager")}} and {{interface("nsIDownload")}} interfaces are not available anymore.</p>
+
+<p>The new module works differently from the old component. In general, you should be aware of the following highlights:</p>
+
+<ul>
+ <li>There is no difference between active downloads and finished downloads. The <a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/Download" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/Download"><code>Download</code></a> object can be used without requiring direct database access.</li>
+ <li>Observer notifications (for example, <code>"dl-done"</code>) and download listeners are replaced by views on the <a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadList" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/DownloadList"><code>DownloadList</code></a> object returned by the <a href="#getList()" title="#getList()"><code>getList()</code></a> method.</li>
+ <li>Object identity replaces the use of numeric identifiers. You can use <a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/Download" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/Download"><code>Download</code></a> objects as keys in a <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set"><code>Set</code></a> or <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map"><code>Map</code></a> to associate your own state to them for the session.</li>
+ <li>There is no separate count of active downloads. If a count is needed, it should be maintained using a view on a <code>DownloadList</code>.</li>
+ <li>The <code><a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/Download#start()" title="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm/Download#start()">start()</a></code> method can be used to restart a failed download. Handling of downloads that have been paused is also different.</li>
+</ul>
+
+<p>While some of the legacy methods and properties have an equivalent in <code>Downloads.jsm</code>, there might be subtle differences in behavior. For example, the properties that handle progress are now more detailed and don't use the special value <code>-1</code> anymore. You may see the documentation of the new methods and properties for details.</p>
+
+<h2 id="Using_it_in_a_XUL_app">Using it in a XUL app</h2>
+
+<p>In a XUL standalone application (running with XULRunner or <code>firefox --app</code>), you have to do additionnal things in order to use the new download manager. By default it is not enabled. It will be enabled when the <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=851471">bug 851471</a> will be closed. If you don't activate it, you could use Downloads.jsm, but your view will not be called by the external helper app service (when a user click on a file to download, in a web page). To enable the new download manager :</p>
+
+<ul>
+ <li>First you have to set the pref {{pref("browser.download.useJSTransfer")}} to <code>true</code>.</li>
+ <li>Then you should declare the new {{interface("nsITransfer")}} object during the startup of your app.</li>
+</ul>
+
+<pre> Components.manager.QueryInterface(Components.interfaces.nsIComponentRegistrar)
+                   .registerFactory(Components.ID("{1b4c85df-cbdd-4bb6-b04e-613caece083c}"), "", "@mozilla.org/transfer;1", null);
+
+</pre>
+
+<p> </p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a class="internal" href="/en-US/docs/JavaScript_code_modules/Using" title="en-US/docs/JavaScript code modules/Using JavaScript code modules">Using JavaScript code modules</a></li>
+ <li><a class="internal" href="/en-US/docs/Mozilla/JavaScript_code_modules" title="en-US/docs/Mozilla/JavaScript code modules">JavaScript code modules</a></li>
+ <li><a class="internal" href="/en-US/docs/Components.utils.import" title="en-US/docs/Components.utils.import"><code>Components.utils.import</code></a></li>
+</ul>
+
+<div id="xunlei_com_thunder_helper_plugin_d462f475-c18e-46be-bd10-327458d045bd"> </div>
diff --git a/files/ja/mozilla/javascript_code_modules/index.html b/files/ja/mozilla/javascript_code_modules/index.html
new file mode 100644
index 0000000000..dfded8747d
--- /dev/null
+++ b/files/ja/mozilla/javascript_code_modules/index.html
@@ -0,0 +1,113 @@
+---
+title: JavaScript コードモジュール
+slug: Mozilla/JavaScript_code_modules
+tags:
+ - Add-ons
+ - Extensions
+ - JavaScript
+ - Modules
+ - XPCOM
+ - 要更新
+translation_of: Mozilla/JavaScript_code_modules
+---
+<div>{{ gecko_minversion_header("1.9") }}</div>
+
+<p>JavaScript コードモジュールは 複数の特権 JavaScript スコープにおいてコードを共有することを目的として導入されました。具体的には、Firefox 自身または拡張機能でのコードの重複を避けるために使用することができます。</p>
+
+<div class="note">
+<p>These are <em>not</em> the same thing as standard JavaScript modules. See {{jsxref("Statements/export", "export")}} and {{jsxref("Statements/import", "import")}} to learn more about how to use standard modules.</p>
+</div>
+
+<table class="topicpage-table">
+ <tbody>
+ <tr>
+ <td>
+ <h2 id="一般的な事項">一般的な事項</h2>
+
+ <dl>
+ <dt><a class="internal" href="/ja/docs/JavaScript_code_modules/Using" title="./Using">Using JavaScript code modules</a></dt>
+ <dd>JavaScript コードモジュールの使用方法についてのイントロダクション。</dd>
+ <dt><a class="internal" href="/ja/Components.utils.import" title="ja/Components.utils.import">Component.utils.import</a></dt>
+ <dd>JavaScript コードモジュールのインポートの方法。</dd>
+ <dt><a class="internal" href="/ja/Components.utils.unload" title="ja/Components.utils.unload">Component.utils.unload</a> {{ gecko_minversion_inline("7.0") }}</dt>
+ <dd>JavaScript コードモジュールのアンロード方法。</dd>
+ <dt><a href="/ja/Code_snippets/Modules" title="ja/Code_snippets/Modules">Code snippets: Modules</a></dt>
+ <dd>コードモジュールの使い方の例。</dd>
+ <dt><a class="external" href="http://wiki.mozilla.org/Labs/JS_Modules">Mozilla Labs JS Modules</a></dt>
+ <dd>このページには、拡張機能の開発者が彼らのコードで使用できる JavaScript  モジュール、ならびにダウンロードリンクとドキュメントの一覧が記載されています。</dd>
+ </dl>
+ </td>
+ <td>
+ <h2 id="標準コードモジュール">標準コードモジュール</h2>
+
+ <dl>
+ </dl>
+
+ <dl>
+ <dt><a href="/ja/Addons/Add-on_Manager" title="ja/Addons/Add-on_Manager">AddonManager.jsm</a> {{ gecko_minversion_inline("2.0") }}</dt>
+ <dd>アドオンのインストール、管理、アンインストールのためのインターフェイスです。</dd>
+ <dt><a href="/ja/Addons/Add-on_Repository" title="ja/Addons/Add-on Repository">AddonRepository.jsm</a> {{ gecko_minversion_inline("2.0") }}</dt>
+ <dd>アドオンリポジトリの検索を許容します。</dd>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Assert.jsm" title="./Assert.jsm">Assert.jsm</a> {{gecko_minversion_inline("28.0")}}</dt>
+ <dd>Implements the <a href="http://wiki.commonjs.org/wiki/Unit_Testing/1.1" title="http://wiki.commonjs.org/wiki/Unit_Testing/1.1">CommonJS Unit Testing specification version 1.1</a>, which provides a basic standardized interface for performing in-code logical assertions with optional, customizable error reporting.</dd>
+ <dt><a href="/ja/docs/JavaScript_code_modules/ctypes.jsm" title="./ctypes.jsm">ctypes.jsm</a> {{ fx_minversion_inline("3.6") }}</dt>
+ <dd>XPCOM コンポーネントの開発をせずに JavaScript のコードからネイティブライブラリを呼び出すためのインターフェイスを提供します。</dd>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/CustomizableUI.jsm" title="./ctypes.jsm">CustomizableUI.jsm</a> {{fx_minversion_inline("29")}}</dt>
+ <dd>Allows you to interact with customizable buttons and items in Firefox's main window UI.</dd>
+ <dt><a href="/ja/docs/Mozilla/JavaScript_code_modules/DeferredTask.jsm" title="./DeferredTask.jsm">DeferredTask.jsm</a> {{gecko_minversion_inline("18.0")}}</dt>
+ <dd>遅延の後にタスクを実行します。</dd>
+ <dt><a href="/ja/docs/Mozilla/JavaScript_code_modules/Dict.jsm" title="./Dict.jsm">Dict.jsm</a> {{gecko_minversion_inline("5.0")}}</dt>
+ <dd>キー・バリュー型の辞書の API を提供します。</dd>
+ <dt><a href="/ja/docs/Mozilla/JavaScript_code_modules/DownloadLastDir.jsm" title="ja/JavaScript_code_modules/DownloadLastDir.jsm">DownloadLastDir.jsm</a> {{ gecko_minversion_inline("2.0") }}</dt>
+ <dd>最後にダウンロードが行われたディレクトリへのパスを提供します。</dd>
+ <dt><a href="/ja/docs/Mozilla/JavaScript_code_modules/Downloads.jsm" title="./Downloads.jsm">Downloads.jsm</a> {{gecko_minversion_inline("23.0")}}</dt>
+ <dd>プラットフォームのダウンロード性能に影響するシングルエントリポイントを提供します。</dd>
+ <dt><a href="/ja/docs/Mozilla/JavaScript_code_modules/FileUtils.jsm" title="./FileUtils.jsm">FileUtils.jsm</a> {{gecko_minversion_inline("1.9.2")}}</dt>
+ <dd>ファイルを取り扱うヘルパーを提供します。</dd>
+ <dt><a href="/ja/docs/Mozilla/JavaScript_code_modules/Geometry.jsm" title="./Geometry.jsm">Geometry.jsm</a> {{gecko_minversion_inline("2.0")}}</dt>
+ <dd>座標点および矩形の基本的な幾何学的な操作を行うルーチンを提供します。</dd>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Http.jsm" title="./Geometry.jsm">HTTP.jsm</a> {{gecko_minversion_inline("25.0")}}</dt>
+ <dd>A wrapper for XMLHttpRequest that provides convenient and simplified API for dealing with HTTP requests.</dd>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/JNI.jsm">JNI.jsm</a> {{fx_minversion_inline("17.0")}}</dt>
+ <dd>Abstracts the js-ctypes to provide an interface that allows JavaScript code to call code running in native JVMs.</dd>
+ <dt><a href="/ja/docs/Mozilla/JavaScript_code_modules/ISO8601DateUtils.jsm" title="./ISO8601DateUtils.jsm">ISO8601DateUtils.jsm</a></dt>
+ <dd>JavaScript <a href="/ja/docs/JavaScript/Reference/Global_Objects/Date" title="JavaScript/Reference/Global_Objects/Date"><code>Date</code></a> オブジェクトと ISO 8601 date 文字列を変換するルーチンを提供します。</dd>
+ <dt><a href="/ja/docs/Mozilla/JavaScript_code_modules/Log.jsm">Log.jsm</a> (以前の log4moz) {{gecko_minversion_inline("27.0")}}</dt>
+ <dd><a href="/ja/docs/Tools/Browser_Console">Browser Console</a> やディスク上のファイルなど、様々なエンドポイントへのログメッセージを記録するための <a href="https://en.wikipedia.org/wiki/Log4j">log4j</a> スタイルの API を提供します。</dd>
+ <dt><a href="/ja/docs/Mozilla/JavaScript_code_modules/NetUtil.jsm" title="./NetUtil.jsm">NetUtil.jsm</a></dt>
+ <dd>データを入力ストリームから出力ストリームに非同期で簡単にコピーする機能を含む、役に立つネットワークユーティリティ関数を提供します。</dd>
+ <dt><a href="/ja/docs/Mozilla/JavaScript_code_modules/openLocationLastURL.jsm" title="./openLocationLastURL.jsm">openLocationLastURL.jsm</a> {{gecko_minversion_inline("1.9.1.4")}}</dt>
+ <dd>ファイルメニューの "URL を開く" を用いて開かれた最後の URL にアクセスする手段を提供します。</dd>
+ <dt><a href="/ja/docs/JavaScript_OS.File" title="/ja/docs/JavaScript_OS.File">osfile.jsm</a> {{gecko_minversion_inline("16.0")}}</dt>
+ <dd>JavaScript モジュールの <code>OS.File</code> にはファイルを操作するためのプリミティブが含まれます。</dd>
+ <dt><a href="/ja/docs/Mozilla/JavaScript_code_modules/PerfMeasurement.jsm" title="./PerfMeasurement.jsm">PerfMeasurement.jsm</a> {{fx_minversion_inline("4.0")}}</dt>
+ <dd>低レベルのハードウェアアクセスおよび OS パフォーマンス測定ツールを提供します。</dd>
+ <dt><a href="/ja/docs/Localization_and_Plurals" title="Localization and Plurals">PluralForm.jsm</a></dt>
+ <dd>現在のロケールにおける正確な複数形を取得する簡単な方法と特定の複数形規則に沿ったローカライズ手段を提供します。</dd>
+ <dt><a href="/ja/docs/Mozilla/JavaScript_code_modules/PopupNotifications.jsm" title="./PopupNotifications.jsm">PopupNotifications.jsm</a> {{gecko_minversion_inline("2.0")}}</dt>
+ <dd>ユーザーに対してモーダルでない通知を表示する簡単な手段を提供します。</dd>
+ <dt><a href="/ja/docs/Mozilla/JavaScript_code_modules/Promise.jsm" title="./Promise.jsm">Promise.jsm</a> {{gecko_minversion_inline("25.0")}}</dt>
+ <dd>2013 年 4 月に提案された <a class="external" href="https://github.com/promises-aplus/promises-spec/blob/1.0.0/README.md" title="https://github.com/promises-aplus/promises-spec/blob/1.0.0/README.md">Promises/A+</a> を実装します。</dd>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/PromiseWorker.jsm">PromiseWorker.jsm</a> {{gecko_minversion_inline("20.0")}}</dt>
+ <dd>A version of {{domxref("ChromeWorker")}} which uses Promises to return the worker's result instead of using an event to do so.</dd>
+ <dt><a href="/ja/docs/Mozilla/JavaScript_code_modules/Services.jsm" title="./Services.jsm">Services.jsm</a> {{gecko_minversion_inline("2.0")}}</dt>
+ <dd>よく使われるサービスへのアクセスを便利に取得できるゲッターを提供します。</dd>
+ <dt><a href="/ja/docs/Mozilla/JavaScript_code_modules/source-editor.jsm" title="./source-editor.jsm">source-editor.jsm</a> {{fx_minversion_inline("11.0")}}</dt>
+ <dd>ソースエディタはスタイルエディタなどの開発ツールで使用されます。このインターフェイスはエディタを実装し、使用者との間で相互に作用します。</dd>
+ <dt><a href="/ja/docs/Mozilla/JavaScript_code_modules/Sqlite.jsm" title="./Sqlite.jsm">Sqlite.jsm</a> {{gecko_minversion_inline("20.0")}}</dt>
+ <dd>{{ interface("mozIStorage") }}/SQLite に対する Promise ベースの API です。</dd>
+ <dt><a href="/ja/docs/Mozilla/JavaScript_code_modules/Task.jsm" title="./Task.jsm">Task.jsm</a> {{gecko_minversion_inline("17.0")}}</dt>
+ <dd>JavaScript の <code>yield</code> 演算子の力を借りてシーケンシャルで非同期な操作を単純化する <a class="external" href="https://taskjs.org/">Task.js</a> のサブセットを実装します。</dd>
+ <dt><a href="/ja/docs/Mozilla/JavaScript_code_modules/Timer.jsm" title="/en-US/docs/Mozilla/JavaScript_code_modules/Timer.jsm">Timer.jsm </a>{{gecko_minversion_inline("22.0")}}</dt>
+ <dd><code>window.setTimeout</code> の純粋な JS 実装です。</dd>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Webapps.jsm" title="/en-US/docs/Mozilla/JavaScript_code_modules/Timer.jsm">Webapps.jsm </a>{{gecko_minversion_inline("??.0")}}</dt>
+ <dd>Provides an interface to manage Open Web Apps.</dd>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/WebRequest.jsm">WebRequest.jsm</a> {{gecko_minversion_inline("41.0")}}</dt>
+ <dd>Provides an API to add event listeners for the various stages of making an HTTP request. The event listener receives detailed information about the request, and can modify or cancel the request.</dd>
+ <dt><a href="/ja/docs/Mozilla/JavaScript_code_modules/XPCOMUtils.jsm" title="./XPCOMUtils.jsm">XPCOMUtils.jsm</a></dt>
+ <dd>JS コンポーネントローダーによって読み込まれる JavaScript コンポーネントのためのユーティリティを含みます。</dd>
+ </dl>
+ </td>
+ </tr>
+ </tbody>
+</table>
diff --git a/files/ja/mozilla/javascript_code_modules/perfmeasurement.jsm/index.html b/files/ja/mozilla/javascript_code_modules/perfmeasurement.jsm/index.html
new file mode 100644
index 0000000000..175d7ad24c
--- /dev/null
+++ b/files/ja/mozilla/javascript_code_modules/perfmeasurement.jsm/index.html
@@ -0,0 +1,302 @@
+---
+title: PerfMeasurement.jsm
+slug: Mozilla/JavaScript_code_modules/PerfMeasurement.jsm
+translation_of: Mozilla/JavaScript_code_modules/PerfMeasurement.jsm
+---
+<p>{{ gecko_minversion_header("2.0") }}</p>
+
+<p><code>PerfMeasurement.jsm</code> JavaScript コードモジュールを使用すると、コードの詳細なパフォーマンス測定値を取得できます。</p>
+
+<p>{{ note("The <code>PerfMeasurement.jsm</code> JavaScript code module can only be used from chrome -- that is, from within the application itself or an add-on.") }}</p>
+
+<p>Before you can use this module, you need to import it into your scope:</p>
+
+<pre><span class="plain">Components.utils.import("resource://gre/modules/PerfMeasurement.jsm")</span></pre>
+
+<p>See <a href="/en/Performance/Measuring_performance_using_the_PerfMeasurement.jsm_code_module" title="en/Performance/Measuring performance using the PerfMeasurement.jsm code module">Measuring performance using the PerfMeasurement.jsm code module</a> for details on how to use this API.</p>
+
+<div class="note"><strong>Note:</strong> At present, <code>PerfMeasurement.jsm</code> is only functional on Linux, but it is planned to add support for Windows ({{ Bug(583322) }}) and OSX ({{ Bug(583323) }}) as well, and we welcome patches for other operating systems.</div>
+
+<h2 id="Method_overview">Method overview</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td><code>static bool <a href="/en/JavaScript_code_modules/PerfMeasurement.jsm#canMeasureSomething()" title="en/JavaScript code modules/PerfMeasurement.jsm#canMeasureSomething()">canMeasureSomething</a>();</code></td>
+ </tr>
+ <tr>
+ <td><code>void <a href="/en/JavaScript_code_modules/PerfMeasurement.jsm#reset()" title="en/JavaScript code modules/PerfMeasurement.jsm#reset()">reset</a>();</code></td>
+ </tr>
+ <tr>
+ <td><code>void <a href="/en/JavaScript_code_modules/PerfMeasurement.jsm#start()" title="en/JavaScript code modules/PerfMeasurement.jsm#start()">start</a>();</code></td>
+ </tr>
+ <tr>
+ <td><code>void <a href="/en/JavaScript_code_modules/PerfMeasurement.jsm#stop()" title="en/JavaScript code modules/PerfMeasurement.jsm#stop()">stop</a>();</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Member_fields">Member fields</h2>
+
+<h3 id="Recorded_data_variables">Recorded data variables</h3>
+
+<p>These variables provide access to the recorded data. Any measurable event that was not being recorded has a value of -1 (that is, 0xFFFFFFFFFFFFFFFF).</p>
+
+<div class="note"><strong>Note:</strong> These values are all zeroed (or set to -1, for events not being measured) when you initialize the <code>PerfMeasurement</code> object, then they are not zeroed again unless you explicitly call the {{ manch("reset") }} method. This lets you accumulate measurements over multiple passes through code that you want to analyze.</div>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td class="header">Variable</td>
+ <td class="header">Type</td>
+ <td class="header">Description</td>
+ </tr>
+ <tr>
+ <td><code>cpu_cycles</code></td>
+ <td><code>uint64</code></td>
+ <td>The number of CPU cycles elapsed.</td>
+ </tr>
+ <tr>
+ <td><code>instructions</code></td>
+ <td><code>uint64</code></td>
+ <td>The number of instructions executed.</td>
+ </tr>
+ <tr>
+ <td><code>cache_references</code></td>
+ <td><code>uint64</code></td>
+ <td>The number of memory accesses that occurred.</td>
+ </tr>
+ <tr>
+ <td><code>cache_misses</code></td>
+ <td><code>uint64</code></td>
+ <td>The number of times memory accesses missed the cache.</td>
+ </tr>
+ <tr>
+ <td><code>branch_instructions</code></td>
+ <td><code>uint64</code></td>
+ <td>The number of branch instructions executed.</td>
+ </tr>
+ <tr>
+ <td><code>branch_misses</code></td>
+ <td><code>uint64</code></td>
+ <td>The number of times branch prediction guessed wrong.</td>
+ </tr>
+ <tr>
+ <td><code>bus_cycles</code></td>
+ <td><code>uint64</code></td>
+ <td>The number of memory bus cycles that elapsed.</td>
+ </tr>
+ <tr>
+ <td><code>page_faults</code></td>
+ <td><code>uint64</code></td>
+ <td>The number of page exceptions the OS handled.</td>
+ </tr>
+ <tr>
+ <td><code>major_page_faults</code></td>
+ <td><code>uint64</code></td>
+ <td>The number of times page faults required disk access.</td>
+ </tr>
+ <tr>
+ <td><code>context_switches</code></td>
+ <td><code>uint64</code></td>
+ <td>The number of context switches that occurred involving the thread being profiled.</td>
+ </tr>
+ <tr>
+ <td><code>cpu_migrations</code></td>
+ <td><code>uint64</code></td>
+ <td>The number of times the profiled thread migrated from one CPU core to another.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="Event_types_measured_constant">Event types measured constant</h3>
+
+<p>The <code>eventsMeasured</code> constant provides a mask indicating which event types were recorded.</p>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td class="header">Variable</td>
+ <td class="header">Type</td>
+ <td class="header">Description</td>
+ </tr>
+ <tr>
+ <td><code>eventsMeasured</code></td>
+ <td><code>EventMask</code></td>
+ <td>A bit mask of the <a href="/en/JavaScript_code_modules/PerfMeasurement.jsm#Event_mask_constants" title="en/JavaScript code modules/PerfMeasurement.jsm#Event mask constants">event types</a> recorded; this can differ from the events requested if the platform doesn't support all of the event types you specified when creating the <code>PerfMeasurement</code> object.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Constants">Constants</h2>
+
+<h3 id="Event_mask_constants">Event mask constants</h3>
+
+<p>These constants are used to construct the mask indicating which events you want to monitor.</p>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td class="header">Constant</td>
+ <td class="header">Value</td>
+ <td class="header">Description</td>
+ </tr>
+ <tr>
+ <td><code>CPU_CYCLES</code></td>
+ <td><code>0x00000001</code></td>
+ <td>Measure CPU cycles elapsed.</td>
+ </tr>
+ <tr>
+ <td><code>INSTRUCTIONS</code></td>
+ <td><code>0x00000002</code></td>
+ <td>Measure the number of instructions executed.</td>
+ </tr>
+ <tr>
+ <td><code>CACHE_REFERENCES</code></td>
+ <td><code>0x00000004</code></td>
+ <td>Measure the number of cache references.</td>
+ </tr>
+ <tr>
+ <td><code>CACHE_MISSES</code></td>
+ <td><code>0x00000008</code></td>
+ <td>Measure the number of cache misses.</td>
+ </tr>
+ <tr>
+ <td><code>BRANCH_INSTRUCTIONS</code></td>
+ <td><code>0x00000010</code></td>
+ <td>Measure the number of branch instructions executed.</td>
+ </tr>
+ <tr>
+ <td><code>BRANCH_MISSES</code></td>
+ <td><code>0x00000020</code></td>
+ <td>Measure the number of times branch prediction guesses wrong.</td>
+ </tr>
+ <tr>
+ <td><code>BUS_CYCLES</code></td>
+ <td><code>0x00000040</code></td>
+ <td>Measure the number of bus cycles elapsed.</td>
+ </tr>
+ <tr>
+ <td><code>PAGE_FAULTS</code></td>
+ <td><code>0x00000080</code></td>
+ <td>Measure the number of page faults that occurred.</td>
+ </tr>
+ <tr>
+ <td><code>MAJOR_PAGE_FAULTS</code></td>
+ <td><code>0x00000100</code></td>
+ <td>Measure the number of major page faults that occurred.</td>
+ </tr>
+ <tr>
+ <td><code>CONTEXT_SWITCHES</code></td>
+ <td><code>0x00000200</code></td>
+ <td>Measure the number of context switches that occurred.</td>
+ </tr>
+ <tr>
+ <td><code>CPU_MIGRATIONS</code></td>
+ <td><code>0x00000400</code></td>
+ <td>Measure the number of context switches that occurred.</td>
+ </tr>
+ <tr>
+ <td><code>ALL</code></td>
+ <td><code>0x000007FF</code></td>
+ <td>Measure all available events.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="Number_of_available_event_types">Number of available event types</h3>
+
+<p>The <code>NUM_MEASURABLE_EVENTS</code> constant tells you how many types of events can be measured.</p>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td class="header">Constant</td>
+ <td class="header">Value</td>
+ <td class="header">Description</td>
+ </tr>
+ <tr>
+ <td><code>NUM_MEASURABLE_EVENTS</code></td>
+ <td><code>11</code></td>
+ <td>The number of types of events that can be measured.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Constructor">Constructor</h2>
+
+<p>Creates a new <code>PerfMeasurement</code> object, configured to record the specified event types.</p>
+
+<pre>PerfMeasurement(
+  EventMask toMeasure
+);
+</pre>
+
+<h6 id="Parameters">Parameters</h6>
+
+<dl>
+ <dt><code>toMeasure</code></dt>
+ <dd>A mask of all of the event types you want to record; see <a href="/en/JavaScript_code_modules/PerfMeasurement#Event_mask_constants" title="en/JavaScript code modules/PerfMeasurement#Event mask constants">Event mask constants</a> for a list of values. OR together all the event types you want to record, and pass that value here. Pass <code>PerfMeasurement.ALL</code> to record all event types.</dd>
+</dl>
+
+<h6 id="Return_value">Return value</h6>
+
+<p>A new <code>PerfMeasurement</code> object configured to record the specified event types.</p>
+
+<h2 id="Methods">Methods</h2>
+
+<h3 id="canMeasureSomething()">canMeasureSomething()</h3>
+
+<p>Indicates whether or not the platform on which your code is running supports this code module.</p>
+
+<pre>static bool canMeasureSomething();
+</pre>
+
+<h6 id="Parameters_2">Parameters</h6>
+
+<p>None.</p>
+
+<h6 id="Return_value_2">Return value</h6>
+
+<p>If even one of the <a href="/en/JavaScript_code_modules/PerfMeasurement.jsm#Event_mask_constants" title="en/JavaScript code modules/PerfMeasurement.jsm#Event mask constants">event types</a> can be recorded, this will return <code>true</code>. Otherwise, it returns <code>false</code>.</p>
+
+<h3 id="reset()">reset()</h3>
+
+<p>Resets all the enabled counters to zero.</p>
+
+<pre>void reset();
+</pre>
+
+<h6 id="Parameters_3">Parameters</h6>
+
+<p>None.</p>
+
+<h3 id="start()">start()</h3>
+
+<p>Starts measuring the performance indicators that were specified when the <code>PerfMeasurement</code> object was created.</p>
+
+<pre>void start();
+</pre>
+
+<h6 id="Parameters_4">Parameters</h6>
+
+<p>None.</p>
+
+<h3 id="stop()">stop()</h3>
+
+<p>Stops measuring performance data. For each enabled counter, the number of measured events of that type that occurred are added to the appropriate visible variable.</p>
+
+<pre>void stop();
+</pre>
+
+<h6 id="Parameters_5">Parameters</h6>
+
+<p>None.</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en/Performance/Measuring_performance_using_the_PerfMeasurement.jsm_code_module" title="en/Performance/Measuring performance using the PerfMeasurement.jsm code module">Measuring performance using the PerfMeasurement.jsm code module</a></li>
+ <li><a href="/en/Performance/JS::PerfMeasurement" title="en/Performance/JS::PerfMeasurement">JS::PerfMeasurement</a></li>
+ <li><a href="/en/Performance" title="en/Performance">Performance</a></li>
+</ul>
diff --git a/files/ja/mozilla/javascript_code_modules/popupnotifications.jsm/index.html b/files/ja/mozilla/javascript_code_modules/popupnotifications.jsm/index.html
new file mode 100644
index 0000000000..6443acf9b9
--- /dev/null
+++ b/files/ja/mozilla/javascript_code_modules/popupnotifications.jsm/index.html
@@ -0,0 +1,213 @@
+---
+title: PopupNotifications.jsm
+slug: Mozilla/JavaScript_code_modules/PopupNotifications.jsm
+tags:
+ - Modules
+ - Notifications
+translation_of: Mozilla/JavaScript_code_modules/PopupNotifications.jsm
+---
+<p>{{ gecko_minversion_header("2.0") }}</p>
+
+<p><code>PopupNotifications.jsm</code> JavaScript コードモジュールはポップアップ通知ボックスサービスを提供します。このサービスを使うことにより、例えば、位置情報に関連する通知の表示といった機能を実現できます。</p>
+
+<p><img alt="popupnotification.png" class="default internal" src="/@api/deki/files/4905/=popupnotification.png"></p>
+
+<p>このサービスを使用するためには、最初に、あなたの JavaScript スコープへとコードモジュールをインポートする必要があります:</p>
+
+<pre>Components.utils.import("resource://gre/modules/PopupNotifications.jsm");
+</pre>
+
+<p>モジュールを一度インポートすれば、エクスポートされた <code>PopupNotifications</code> オブジェクトを使用できるようになります。このオブジェクトは、ポップアップ通知パネルの作成と表示のためのメソッドを提供します。</p>
+
+<div class="note"><strong>註:</strong>このコードモジュールは Firefox の chrome ウィンドウによってインポートされます。そのため、多くの拡張機能では改めてインポートする必要はありません。</div>
+
+<h2 id="メソッド概要">メソッド概要</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td><code>void <a href="/ja/JavaScript_code_modules/PopupNotifications.jsm#locationChange()" title="ja/JavaScript code modules/PopupNotifications.jsm#locationChange()">locationChange</a>();</code></td>
+ </tr>
+ <tr>
+ <td><code>Notification <a href="/en/JavaScript_code_modules/PopupNotifications.jsm#getNotification()" title="en/JavaScript code modules/PopupNotifications.jsm#getNotification()">getNotification</a>(id, browser);</code></td>
+ </tr>
+ <tr>
+ <td><code>void <a href="/ja/JavaScript_code_modules/PopupNotifications.jsm#remove()" title="ja/JavaScript code modules/PopupNotifications.jsm#remove()">remove</a>(notification);</code></td>
+ </tr>
+ <tr>
+ <td><code>Notification <a href="/ja/JavaScript_code_modules/PopupNotifications.jsm#show()" title="ja/JavaScript code modules/PopupNotifications.jsm#show()">show</a>(browser, id, message, anchorID, mainAction, secondaryActions, options);</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="プロパティ">プロパティ</h2>
+
+<table class="standard-table" style="width: auto;">
+ <tbody>
+ <tr>
+ <td class="header">属性</td>
+ <td class="header">型</td>
+ <td class="header">詳細</td>
+ </tr>
+ <tr>
+ <td><code>isPanelOpen</code></td>
+ <td><code>Boolean</code></td>
+ <td>通知パネルが現在表示されているのであれば <code>true</code> を、そうでない場合は <code>false</code> を返します。</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="メソッド">メソッド</h2>
+
+<h3 id="locationChange()">locationChange()</h3>
+
+<p>使用者 (consumer)は、ポップアップ通知モジュールに現在のブラウザのロケーションが変更されたことを知らせるために、このメソッドを呼び出します。これにより通知サービスは、必要に応じて、アクティブな通知を更新することができます。</p>
+
+<div class="note"><strong>註:</strong>Firefox のウィンドウ中で PopupNotifications オブジェクトを使用している場合、あなたは、このメソッドを呼び出す必要はありません。Firefox のコードが自動でうまく取り扱ってくれます。</div>
+
+<pre>void locationChange();
+</pre>
+
+<h6 id="引数">引数</h6>
+
+<p>無し。</p>
+
+<h3 id="getNotification()">getNotification()</h3>
+
+<p>指定した <code>browser</code> 要素および ID に関連づけられている <code>Notification</code> オブジェクトを取得します。</p>
+
+<pre><code>Notification</code> getNotification(
+ string id
+ XULElement browser
+);
+</pre>
+
+<h6 id="引数_2">引数</h6>
+
+<dl>
+ <dt><code>id</code></dt>
+ <dd>検索に使用する <code>Notification</code> ID。</dd>
+ <dt><code>browser</code></dt>
+ <dd><code>Notification</code> オブジェクトを検索する XUL {{ XULElem("browser") }} 要素。 <code>null</code> である場合、現在選択されている {{ XULElem("browser") }} に関連づけられている<code> Notification</code> オブジェクトが検索されます。</dd>
+</dl>
+
+<h6 id="返り値">返り値</h6>
+
+<p>与えられた引数に対応する <code>Notification</code> オブジェクト。対応する<code> Notification </code>オブジェクトが無い場合は <code>null</code> を返します。</p>
+
+<h3 id="remove()">remove()</h3>
+
+<p>指定された通知を削除します。</p>
+
+<pre>void remove(
+  Notification notification
+);
+</pre>
+
+<h6 id="引数_3">引数</h6>
+
+<dl>
+ <dt><code>notification</code></dt>
+ <dd>削除する通知を表す <code>Notification</code> オブジェクト。</dd>
+</dl>
+
+<h3 id="show()">show()</h3>
+
+<p>新しいポップアップ通知を追加し、ユーザーへと表示します。</p>
+
+<pre>Notification show(
+  browser,
+  id,
+  message,
+  anchorID,
+  mainAction,
+  secondaryActions,
+  options
+);
+</pre>
+
+<h6 id="引数_4">引数</h6>
+
+<dl>
+ <dt><code>browser</code></dt>
+ <dd>通知を結びつける XUL {{ XULElem("browser") }} 要素。この値は <code>null</code> であってはいけません。現在のタブへと通知を結びつける場合であれば、単純に <code>gBrowser.selectedBrowser</code> を指定する事が可能です。</dd>
+ <dt><code>id</code></dt>
+ <dd>表示される通知の種類を示すユニーク ID 文字列。例えば、位置情報に関連する通知の場合のIDは "geolocation" となります。同じ ID を持つ通知は、同時にひとつしか表示されません。指定した ID の通知が既に通知されていた場合、新しい通知によって古い通知は置き換えられることになります。</dd>
+ <dt><code>message</code></dt>
+ <dd>通知パネルに表示される文字列。</dd>
+ <dt><code>anchorID</code></dt>
+ <dd>通知ポップアップのアンカーを表示することとなる要素の ID。(つまり、ポップアップの矢印が指し示すであろう要素のことです) <code>null</code> に指定した場合、通知は PopupNotification オブジェクトのアイコンボックスを表示元とします。この anchorID は、PopupNotification オブジェクトのアイコンボックスの内側に含まれる要素を指定しなければなりません。(Firefox ウィンドウであれば、グローバル PopupNotifications オブジェクトは <code>notification-popup-box</code> 要素を使用します)</dd>
+ <dt><code>mainAction</code></dt>
+ <dd>通知パネル中に描画されるボタンを定義するフィールドを含む JavaScript オブジェクトリテラル。詳しくは下記の <a href="/ja/JavaScript_code_modules/PopupNotifications.jsm#Notification_actions" title="ja/JavaScript code modules/PopupNotifications.jsm#Notification actions">Notification actions</a> を参照してください。</dd>
+ <dt><code>secondaryActions</code></dt>
+ <dd>Notification action オブジェクトの配列。これらは通知パネルのボタンのドロップダウンメニューへ項目を追加するのに使われます。</dd>
+ <dt><code>options</code></dt>
+ <dd>通知のオプションとなるプロパティを含む JavaScript オブジェクト。詳しくは下記の <a href="/ja/JavaScript_code_modules/PopupNotifications.jsm#Notification_actions" title="ja/JavaScript code modules/PopupNotifications.jsm#Notification options">Notification options</a> を参照してください。</dd>
+</dl>
+
+<h6 id="返り値_2">返り値</h6>
+
+<p>追加された通知に対応する <a href="/ja/JavaScript_code_modules/PopupNotifications.jsm#The_Notification_object" title="ja/JavaScript code modules/PopupNotifications.jsm#The Notification object"><code>Notification</code></a> オブジェクトを返します。</p>
+
+<h2 id="Notification_actions">Notification actions</h2>
+
+<p>Notification action オブジェクトは、通知に結び付いたアクションのためのユーザーインターフェースを記述します。<strong>main action</strong> は通知パネル中に表示されるボタンの挙動を記述するために使われます。一方、<strong>secondary actions</strong> はボタンからドロップダウン表示されるメニューの挙動を記述するのにつかわれます。</p>
+
+<p>Notification action は以下のプロパティを含まなければなりません:</p>
+
+<dl>
+ <dt><code>label</code></dt>
+ <dd>アクションを説明するラベルのテキスト。</dd>
+ <dt><code>accessKey</code></dt>
+ <dd>アクションを発動するキーストロークを示す文字列。</dd>
+ <dt><code>callback</code></dt>
+ <dd>ユーザーがアクションを選択した際に実行される JavaScript 関数。</dd>
+</dl>
+
+<h2 id="Notification_options">Notification options</h2>
+
+<p>Notification options オブジェクトは通知パネルの更なるカスタマイズを指定できます。以下のプロパティをどのように組み合わせた場合でもカスタマイズは提供されます:</p>
+
+<dl>
+ <dt><code>persistence</code></dt>
+ <dd>通知を存在させ続ける、ページのロード回数を示す整数値。一度に大量のページのロードが発生した場合、通知は自動的に消えるかもしれません。</dd>
+ <dt><code>timeout</code></dt>
+ <dd>少なくとも通知が自動的には消えない時間を指定するタイムスタンプ(UNIX エポックからの経過ミリ秒)。タイムアウト値を指定した通知は、ユーザーの操作によって非表示にならない限り、指定された時間までは自動的に消えることはありません。大抵の使用時において、このパラメータ値は <code>Date.now()</code> に、通知を表示し続ける時間量を示すオフセット値を加えます。(例:30秒とする場合は <code>Date.now() + 30000</code> 。)</dd>
+ <dt><code>persistWhileVisible</code></dt>
+ <dd>ロケーションの変更をまたいでも通知を表示させたままにするかどうかを指定する真偽値。<code>true</code> の場合、別のロケーションへと移動しても、通知は表示されたままになります。</dd>
+ <dt><code>dismissed</code></dt>
+ <dd><strong>非表示通知 (dismissed notification) </strong> として通知を追加するかどうかを指定する真偽値。非表示通知 はアンカーのクリックによってアクティベートされます。この指定により、あなたが作成した通知は、ユーザーがアンカーをクリックした後に表示されます。</dd>
+ <dt><code>eventCallback</code></dt>
+ <dd>通知の状態が変更されたときに呼び出される JavaScript 関数。コールバック関数の最初の引数は、発生した状態の変更を示す文字列となります。詳しくは下記の <a href="/ja/JavaScript_code_modules/PopupNotifications.jsm#Notification_events" title="ja/JavaScript code modules/PopupNotifications.jsm#Notification events">Notification events</a> を参照してください。</dd>
+ <dt><code>neverShow</code></dt>
+ <dd>真偽値。<code>true</code> に指定した場合、ポップアップが表示されるのを永続的に妨げます。通知としてアンカーアイコンのみを表示する目的に使用できます。</dd>
+ <dt><code>removeOnDismissal</code></dt>
+ <dd>通知が非表示である場合(すなわち、ユーザーの操作でポップアップが閉じられている場合はいつでも)、この設定を <code>true</code> にされている通知は削除されます。</dd>
+ <dt><code>popupIconURL</code> {{ fx_minversion_inline("11") }}</dt>
+ <dd>ポップアップに表示される画像の URL を指定する文字列。 これは通常、 CSS で {{ cssxref("list-style-image") }} と <code>.popup-notification-icon[popupid=...]</code> セレクタ―を用いて指定されています。</dd>
+</dl>
+
+<h2 id="Notification_events">Notification events</h2>
+
+<p><code>show()</code> を呼び出す際に <code>options</code> パラメータを使用してイベントコールバックを指定した場合、通知の状態の変更に応じてコールバック関数が呼び出されます。コールバック関数の最初の引数は、状態の変更を示す以下の文字列のうちのいずれかひとつとなります:</p>
+
+<dl>
+ <dt>"dismissed"</dt>
+ <dd>(クリックやタブ切り替えといった)ユーザーの操作によって通知が消えた場合。"removed" とは異なり、通知は再び表示することが可能です。</dd>
+ <dt>"removed"</dt>
+ <dd>通知上でのユーザーの操作、または新たなロケーションへブラウザが移動することによって通知が削除場合。</dd>
+ <dt>"shown"</dt>
+ <dd>通知が表示された場合。通知の非表示と再表示の度に発火します。</dd>
+</dl>
+
+<h2 id="The_Notification_object">The Notification object</h2>
+
+<p>いずれの通知も <code>Notification</code> オブジェクトによって提供されます。このオブジェクトは通知の表示と管理に必要なすべてのデータを含み、1つのメソッドを持っています。<code>anchorElement</code> プロパティは通知のアンカー要素を返します。 <code>remove()</code>メソッドは通知を除去します。</p>
+
+<h2 id="関連項目">関連項目</h2>
+
+<ul>
+ <li><a href="/ja/Using_popup_notifications" title="ja/Using popup notifications">Using popup notifications</a></li>
+</ul>
+
+<p>{{ languages( { "en": "en/JavaScript_code_modules/PopupNotifications.jsm" } ) }}</p>
diff --git a/files/ja/mozilla/javascript_code_modules/using/index.html b/files/ja/mozilla/javascript_code_modules/using/index.html
new file mode 100644
index 0000000000..d1e91166e7
--- /dev/null
+++ b/files/ja/mozilla/javascript_code_modules/using/index.html
@@ -0,0 +1,208 @@
+---
+title: JavaScript コードモジュールの利用
+slug: Mozilla/JavaScript_code_modules/Using
+tags:
+ - Add-ons
+ - Extensions
+ - XPCOM
+translation_of: Mozilla/JavaScript_code_modules/Using
+---
+<div>{{gecko_minversion_header("1.9")}}</div>
+
+<p>JavaScript コードモジュールは、{{Gecko("1.9")}} で導入されたコンセプトであり、特権を持った異なるスコープ間でコードを共有するために用いられます。また、モジュールは、グローバルな JavaScript のシングルトンオブジェクトを生成するために用いることもできます (以前は JavaScript XPCOM オブジェクトを使う必要がありました)。 JavaScript コードモジュールは、登録されたパスに配置された純粋な JavaScript のコードです。<a href="/ja/docs/Components.utils.import"><code>Components.utils.import()</code></a> や <code><a href="https://developer.mozilla.org/en-US/docs/Components.utils.import">Components.utils["import"]()</a></code> を使って、 XUL スクリプトや JavaScript XPCOM スクリプトのような特定の JavaScript のスコープへモジュールを読み込むことができます。</p>
+
+<h2 id="Creating_a_JavaScript_code_module" name="Creating_a_JavaScript_code_module">JavaScript コードモジュールの作成</h2>
+
+<p>とても単純な JavaScript モジュールの例を以下に示します。</p>
+
+<pre class="brush: js">var EXPORTED_SYMBOLS = ["foo", "bar"];
+
+function foo() {
+ return "foo";
+}
+
+var bar = {
+ name : "bar",
+ size : 3
+};
+
+var dummy = "dummy";
+</pre>
+
+<p>モジュールが普通の JavaScript を使って、関数、オブジェクト、定数、その他あらゆる JavaScript の型のオブジェクトを生成していることに注目してください。また、モジュールは <code>EXPORTED_SYMBOLS</code> という名前の特別な Array を定義します。 <code>EXPORTED_SYMBOLS</code> 内で命名されたすべての JavaScript オブジェクトは、モジュールからエクスポートされてインポート先のスコープ内で使用可能となります。以下に例を示します。</p>
+
+<pre class="brush: js">Components.utils.import("resource://app/my_module.jsm");
+
+alert(foo()); // "foo" と表示される
+alert(bar.size + 3); // "6" と表示される
+alert(dummy); // 'dummy' はモジュールからエクスポートされないため、"dummy is not defined" と表示される
+</pre>
+
+<div class="note">
+<p><strong>Note: </strong>あなたがコードモジュールにテスト変更を加えたとき、実行する前にアプリケーションビルドID(例、バージョンなど) が変わっているかどうか確認してください。 otherwise, you may find yourself running the previous version of your module's code.</p>
+</div>
+
+<h3 id="code_moduleのURL">code moduleのURL</h3>
+
+<p>上記のサンプルからわかる通り、コードモジュールをインポートするためにはURLが必要となります。(上の例ではURLは"resource://app/my_module.jsm"となっています)</p>
+
+<p>Code modulesは<strong>chrome:</strong> ({{gecko_minversion_inline("2")}}), <strong>resource:</strong>, or <strong>file:</strong> URLのどれかを使用してのみロードすることができます。</p>
+
+<ul>
+ <li>If you're writing an extension for Firefox 4 and already have a <a href="https://developer.mozilla.org/en-US/docs/Chrome_Registration">chrome.manifest</a> with a <code>content</code> instruction in it, you can put the code module in your content folder and reference it like your other content files via <code>chrome://&lt;yourextension&gt;/content/&lt;yourmodule&gt;.jsm.</code></li>
+ <li>If your extension or application needs to support Mozilla 1.9.x (Firefox 3.x), you should register a new resource URL. Details on doing this are in the <a href="https://developer.mozilla.org/ja/docs/Mozilla/JavaScript_code_modules/Using$edit#Extending_resource.3A_URLs">"Extending resource: URLs" section</a> below.</li>
+</ul>
+
+<h3 id="Sharing_objects_using_code_modules">Sharing objects using code modules</h3>
+
+<p><a href="/ja/docs/Components.utils.import"><code>Components.utils.import()</code></a> の動作の非常に重要な点は、モジュールが読み込まれた時点でキャッシュされ、次のインポート時には、新しいバージョンのモジュールを再び読み込むことなく、以前にキャッシュされたバージョンを使用するということです。これは、モジュールが複数回インポートされた時に共有されることを意味します。モジュールをインポートしたあらゆるスコープ内で、データ、オブジェクト、関数の変更が可能となります。例えば、単一のモジュールが異なる 2 つの JavaScript のスコープ内へインポートされた場合、一方のスコープでの変更は他方のスコープにも影響します。</p>
+
+<p>スコープ 1:</p>
+
+<pre class="brush: js">Components.utils.import("resource://app/my_module.jsm");
+
+alert(bar.size + 3); // "6" と表示される
+
+bar.size = 10;
+</pre>
+
+<p>スコープ 2:</p>
+
+<pre class="brush: js">Components.utils.import("resource://app/my_module.jsm");
+
+alert(foo()); // "foo" と表示される
+alert(bar.size + 3); // "13" と表示される
+</pre>
+
+<p>このような共有の動作によって、ウィンドウや XUL スクリプト、XPCOM コンポーネントをまたいでデータを共有できるシングルトンのオブジェクトを生成することが可能となります。</p>
+
+<p>{{Note("モジュールをインポートしたスコープごとに、そのモジュールでエクスポートされたシンボルの by-value コピーを受け取ります。シンボルの値の変更は他のスコープに伝搬することはありません。")}}</p>
+
+<p>スコープ 1:</p>
+
+<pre class="brush: js">Components.utils.import("resource://app/my_module.jsm");
+
+bar = "foo";
+alert(bar); // "foo" と表示される
+</pre>
+
+<p>スコープ 2:</p>
+
+<pre class="brush: js">Components.utils.import("resource://app/my_module.jsm");
+
+alert(bar); // "[object Object]" と表示される
+</pre>
+
+<p>by-value コピーの主な効果は単純型のグローバル変数がスコープを横断して共有されないことです。常にラッパークラスの中に変数を置いてラッパーをエクスポートします (上の例にある <em>bar</em> のように)。</p>
+
+<p>{{h2_gecko_minversion("Unloading code modules", "7.0")}}</p>
+
+<p><code><a href="https://developer.mozilla.org/en-US/docs/Components.utils.unload">Components.utils.unload()</a></code> allows you to unload a previously imported code module. Once this method has been called, references to the module will continue to work but any subsequent import of the module will reload it and give a new reference.</p>
+
+<h3 id="Examples">Examples</h3>
+
+<ul>
+ <li>A template to download and edit is seen here on <a href="https://gist.github.com/Noitidart/9045387">GitHub - Gists - _template-BootstrapJSM.xpi</a></li>
+</ul>
+
+<h3 id="resource:_Protocol" name="resource:_Protocol">コードモジュールの配置</h3>
+
+<div class="geckoVersionNote">
+<div>{{gecko_callout_heading("2.0")}}</div>
+
+<p>{{Gecko("2.0")}} より前のバージョンでは、JavaScript コードモジュールは、<strong>file:</strong> または <strong>resource:</strong> URL のみを用いて読み込むことができました。 {{Gecko("2.0")}} では、<strong>chrome:</strong> URL からのモジュールの読み込みが追加されましたが、これらは JAR アーカイブ内に限られます。</p>
+</div>
+
+<p><a href="/ja/docs/Components.utils.import"><code>Components.utils.import()</code></a> を使用する場合、コードモジュールは、ディスク上のファイルを指し示すために <strong>file:</strong> または <strong>chrome:</strong>, <strong>resource:</strong> URL を使用して読み込まれなければなりません。</p>
+
+<h4 id="Using_a_resource.3a_URL" name="Using_a_resource.3a_URL">resource: URL の使用</h4>
+
+<p>{{Gecko("2.0")}} より前のバージョンでは、コードモジュールを読み込む最も一般的な方法は <strong>resource:</strong> URL を使用することでした。 resource URL の基本的な構文は以下のようになります:</p>
+
+<pre>resource://&lt;alias&gt;/&lt;relative-path&gt;/&lt;file.js|jsm&gt;
+</pre>
+
+<p><code>&lt;alias&gt;</code> は通常、アプリケーションや XUL ランタイムの相対的なファイルパスへのエイリアスです。 XUL ランタイムによって予め定義されたいくつかのエイリアスがあります:</p>
+
+<ul>
+ <li><code>app</code> - XUL アプリケーションのパスへのエイリアス。</li>
+ <li><code>gre</code> - XUL ランタイムのパスへのエイリアス。</li>
+</ul>
+
+<p><code>&lt;relative-path&gt;</code> は複数の階層とすることも可能で、常に <code>&lt;alias&gt;</code> で定義されたパスに対する相対パスとなります。一般的な相対パスは "modules" であり、 XUL Runner や Firefox にて使用されています。コードモジュールは拡張子 .js や .jsm の単一の JavaScript ファイルです。</p>
+
+<p><code>&lt;alias&gt;</code> must be unique to your add-on, as the application and other extensions share the same namespace for all aliases.</p>
+
+<h3 id="chrome.manifestを使う">chrome.manifestを使う</h3>
+
+<p>拡張機能や XUL アプリケーションへ独自のエイリアスを追加する最も簡単な方法は、 <a href="/ja/docs/Chrome_Registration">chrome manifest</a> 内の以下のような行によって登録することです:</p>
+
+<pre>resource <em>aliasname</em> <em>uri/to/files/</em></pre>
+
+<p>例えば、拡張機能 <em>foo</em> の XPI ファイルがモジュール <em>bar.js</em> を含むトップレベルの <em>modules/</em> ディレクトリを有する場合 (つまり、<em>modules/</em> ディレクトリが <em>chrome.manifest</em> と <em>install.rdf</em> の兄弟)、以下の命令によってそのディレクトリへのエイリアスを作ることができます:</p>
+
+<pre>resource foo modules/</pre>
+
+<p>(末尾のスラッシュを忘れないこと!) すると、以下の一文でモジュールを JavaScript コードへインポートできるようになります:</p>
+
+<pre class="brush: js">Components.utils.import("<a rel="freelink">resource://foo/bar.js</a>");
+</pre>
+
+<h3 id="プログラムによるエイリアスの追加">プログラムによるエイリアスの追加</h3>
+
+<p>{{interface("nsILocalFile")}} として表せるパスへの独自のエイリアスをプログラムによって追加することもできます。以下に例を示します。</p>
+
+<pre class="brush: js">var ioService = Components.classes["@<a class="linkification-ext" href="http://mozilla.org/network/io-service;1">mozilla.org/network/io-service;1</a>"]
+ .getService(Components.interfaces.nsIIOService);
+var resProt = ioService.getProtocolHandler("resource")
+ .QueryInterface(Components.interfaces.nsIResProtocolHandler);
+
+var aliasFile = Components.classes["@<a class="linkification-ext" href="http://mozilla.org/file/local;1">mozilla.org/file/local;1</a>"]
+ .createInstance(Components.interfaces.nsILocalFile);
+aliasFile.initWithPath("/some/absolute/path");
+
+var aliasURI = ioService.newFileURI(aliasFile);
+resProt.setSubstitution("myalias", aliasURI);
+
+// コードモジュールはサブフォルダではなくエイリアスフォルダ直下にあるとする
+</pre>
+
+<h2 id="Notes">Notes</h2>
+
+<h3 id="Custom_modules_and_XPCOM_components" name="Custom_modules_and_XPCOM_components">カスタムモジュールと XPCOM コンポーネント</h3>
+
+<p>{{Gecko("2.0")}} より前のバージョンでは、JavaScript XPCOM コンポーネントは、chrome が登録される前に読み込まれることに注意してください。これは、コンポーネントソース内のトップレベルにおいて独自の resource URL で <code><a href="/ja/docs/Components.utils.import">Components.utils.import()</a></code> が使用できないことを意味します。可能な解決策は、<a href="/ja/docs/Components.utils.import"><code>Components.utils.import()</code></a> の呼び出しを XPCOM コンポーネントのコンストラクタ内に移動することです (<a href="http://groups.google.com/group/mozilla.dev.apps.firefox/browse_thread/thread/e178d41afa2ccc87?hl=en#">このことについての議論</a>を参照してください)。</p>
+
+<h3 id="Packaging_notes">Packaging notes</h3>
+
+<p>It's important to note that you should not typically put your JavaScript code modules in a JAR file in your add-on. Firefox 3.6 doesn't support them at all, and there's only one case in which it's remotely useful: a Firefox 4-only add-on which must be installed unpacked. Otherwise placing code modules in a JAR file breaks compatibility unnecessarily.</p>
+
+<h2 id="Importing_CommonJS_modules">Importing CommonJS modules</h2>
+
+<p>The JavaScript code modules described here are not the same thing as <a href="http://www.commonjs.org/specs/modules/1.0/">CommonJS modules</a>, but you can import CommonJS modules into any scope where you can use <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Language_Bindings/Components.utils.import">Components.utils.import</a>. Just call the following:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">const</span> <span class="punctuation token">{</span> require <span class="punctuation token">}</span> <span class="operator token">=</span> Cu<span class="punctuation token">.</span><span class="keyword token">import</span><span class="punctuation token">(</span><span class="string token">"resource://gre/modules/commonjs/toolkit/require.js"</span><span class="punctuation token">,</span> <span class="punctuation token">{</span><span class="punctuation token">}</span><span class="punctuation token">)</span></code></pre>
+
+<p>This will import <code>require()</code> into your scope.</p>
+
+<p>You can then use that to import CommonJS modules. You can import <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/SDK">Add-on SDK</a> modules in just the same way you could from an SDK add-on:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="comment token">// import the SDK's base64 module</span>
+
+<span class="keyword token">var</span> base64 <span class="operator token">=</span> <span class="function token">require</span><span class="punctuation token">(</span><span class="string token">"sdk/base64"</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+base64<span class="punctuation token">.</span><span class="function token">encode</span><span class="punctuation token">(</span><span class="string token">"hello"</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// "aGVsbG8="</span></code></pre>
+
+<p>You can import other CommonJS modules, too, as long as you know the path to them:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="comment token">// import my module</span>
+
+<span class="keyword token">var</span> myModule <span class="operator token">=</span> <span class="function token">require</span><span class="punctuation token">(</span><span class="string token">"resource://path/to/my/module.js"</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
+
+<p>In this case, though, you might be better off <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/_loader">creating your own loader</a>, so you can specify the <code><a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/_loader#paths">paths</a></code> property yourself.</p>
+
+<h2 id="関連項目">関連項目</h2>
+
+<ul>
+ <li><a href="/ja/docs/Mozilla/JavaScript_code_modules">JavaScript コードモジュール</a>のトピックのページ。</li>
+ <li><a href="http://wiki.mozilla.org/Labs/JS_Modules">Mozilla Labs JS Modules</a> - このページは JS モジュールの一覧、加えて拡張機能開発者が利用できるコードのダウンロードリンクと文書を特集しています。</li>
+</ul>