blob: 079e34adc075da9915c2e18fb718adf64bb35d32 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
|
---
title: ネイティブマニフェスト
slug: Mozilla/Add-ons/WebExtensions/Native_manifests
tags:
- Extensions
- WebExtensions
translation_of: Mozilla/Add-ons/WebExtensions/Native_manifests
---
<div>{{AddonSidebar}}</div>
<p>ネイティブマニフェストは特別な形式の JSON ファイルで、拡張機能のインストールプロセスの範囲外の方法でユーザーのコンピューターに配布されます。例えば、ネイティブマニフェストは端末の管理者やネイティブアプリケーションのインストーラーによって配布されます。</p>
<p>3つの異なる種類のネイティブマニフェストがあります:</p>
<table class="standard-table">
<tbody>
<tr>
<td style="width: 40%;"><a href="#Native_messaging_manifests">Native messaging マニフェスト</a></td>
<td><a href="/ja/docs/Mozilla/Add-ons/WebExtensions/Native_messaging">native messaging</a> と呼ぶ機能を可能にします、ここでは拡張機能は端末にインストールされたネイティブアプリとやりとりできます。</td>
</tr>
<tr>
<td><a href="#Managed_storage_manifests">Managed storage マニフェスト</a></td>
<td>
<p>{{WebExtAPIRef("storage.managed")}} API 使って拡張機能がアクセスする読み込み専用データを定義します。</p>
</td>
</tr>
<tr>
<td><a href="#PKCS_11_manifests">PKCS #11 マニフェスト</a></td>
<td>
<p>拡張機能が {{WebExtAPIRef("pkcs11")}} API を使って PKCS #11 セキュリティモジュールを列挙して、Firefox にインストールできるようにします。</p>
</td>
</tr>
</tbody>
</table>
<p>すべてのネイティブマニフェスト用に、ブラウザーがマニフェストを見つけられるように調整する必要があります。 <a href="#Manifest_location">マニフェストの場所</a> のセクションでこのルールを述べています。</p>
<h2 id="Native_messaging_manifests" name="Native_messaging_manifests">Native messaging マニフェスト</h2>
<p>native messaging マニフェストは以下のプロパティを含む単一の JSON オブジェクトです:</p>
<table class="fullwidth-table standard-table">
<thead>
<tr>
<th scope="col">名前</th>
<th scope="col">種類</th>
<th scope="col">説明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>name</code></td>
<td>String</td>
<td>
<p>ネイティブアプリケーションの名前です。</p>
<p>この名前は拡張機能の {{WebExtAPIRef("runtime.connectNative()")}} か {{WebExtAPIRef("runtime.sendNativeMessage()")}} に渡される名前と一致している必要があります。</p>
<p>OS X と Linux では、native messaging マニフェストの(.json 拡張子を除いた)ファイル名とも一致していなければなりません。</p>
<p>Windows では、native messaging マニフェストの場所を記した作成済みレジストリキーの名前と一致している必要があります。</p>
<p>次の正規表現にマッチする必要があります: "^\w+(\.\w+)*$" つまり、名前には(大文字か小文字の)英数字とアンダースコア、ドットのみ含めることができます。最初または最後の文字にドットを使用することはできず、ドットを2つ以上連続させることもできません。</p>
</td>
</tr>
<tr>
<td><code>description</code></td>
<td>String</td>
<td>
<p>ネイティブアプリケーションの説明です。</p>
</td>
</tr>
<tr>
<td><code>path</code></td>
<td>String</td>
<td>
<p>ネイティブアプリケーションのパスです。</p>
<p>Windows では、マニフェスト自身からの相対パスを指定することもできます。OS X や Linux では絶対パスでなければなりません。</p>
</td>
</tr>
<tr>
<td><code>type</code></td>
<td>String</td>
<td>
<p>拡張機能にアプリケーションが接続するために使用する方法を記述します。</p>
<p>現在のところ、"stdio" のみが指定可能です。これはアプリケーションが標準入力 (stdin) を介してメッセージを受信し、標準出力 (stdout) を使用してメッセージを送信することを示します。</p>
</td>
</tr>
<tr>
<td><code>allowed_extensions</code></td>
<td>Array of String</td>
<td>
<p><a href="https://developer.mozilla.org/ja/docs/Mozilla/Add-ons/WebExtensions/WebExtensions_and_the_Add-on_ID">Add-on ID</a> の配列です。配列中のそれぞれの値はこのネイティブアプリケーションとの通信が許可されている拡張機能を表します。</p>
<p>つまり、作成する拡張機能の manifest.json ファイルに <a href="https://developer.mozilla.org/ja/Add-ons/WebExtensions/manifest.json/applications">applications</a> キーを含めたくなるものと思われるため、開発中に明示的なIDを設定しておくと良いでしょう。</p>
</td>
</tr>
</tbody>
</table>
<p>例として、"ping_pong" ネイティブアプリケーションのマニフェストを以下に示します:</p>
<pre class="brush: json">{
"name": "ping_pong",
"description": "Example host for native messaging",
"path": "/path/to/native-messaging/app/ping_pong.py",
"type": "stdio",
"allowed_extensions": [ "ping_pong@example.org" ]
}</pre>
<p>この設定では、"ping_pong@example.org" という ID の拡張機能が "ping_pong" という名前を適切な {{WebExtAPIRef("runtime")}} API 関数に渡すことで接続を許可されます。 アプリケーション自体は "/path/to/native-messaging/app/ping_pong.py" にあります。</p>
<h2 id="Managed_storage_manifests" name="Managed_storage_manifests">Managed storage マニフェスト</h2>
<p>managed storage マニフェストには次のプロパティを含む単一の JSON オブジェクトです:</p>
<table class="fullwidth-table standard-table">
<thead>
<tr>
<th scope="col">名前</th>
<th scope="col">種類</th>
<th scope="col">説明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>name</code></td>
<td>String</td>
<td>
<p>ストレージにアクセスできる拡張機能の ID で、拡張機能の <a href="https://developer.mozilla.org/ja/docs/Mozilla/Add-ons/WebExtensions/manifest.json/applications">applications</a> キーで指定したのと同じものです。</p>
</td>
</tr>
<tr>
<td><code>description</code></td>
<td>String</td>
<td>人間が読める説明で、Firefox には無視されます。</td>
</tr>
<tr>
<td><code>type</code></td>
<td>String</td>
<td>
<p>"storage" でなければなりません。</p>
</td>
</tr>
<tr>
<td><code>data</code></td>
<td>Object</td>
<td>
<p>JSON オブジェクトで、その中にあらゆる有効な JSON 値(文字列、数値、真偽値、配列、オブジェクトを含む)が入ります。これは <code>browser.storage.managed</code> ストレージ領域内のデータになります。</p>
</td>
</tr>
</tbody>
</table>
<p>例えば:</p>
<pre class="brush: json line-numbers language-json"><code class="language-json"><span class="punctuation token">{</span>
<span class="key token">"name":</span> <span class="string token">"favourite-colour-examples@mozilla.org"</span><span class="punctuation token">,</span>
<span class="key token">"description":</span> <span class="string token">"ignored"</span><span class="punctuation token">,</span>
<span class="key token">"type":</span> <span class="string token">"storage"</span><span class="punctuation token">,</span>
<span class="key token">"data":</span>
<span class="punctuation token">{</span>
<span class="key token">"colour":</span> <span class="string token">"management thinks it should be blue!"</span>
<span class="punctuation token">}</span>
<span class="punctuation token">}</span></code></pre>
<p>この JSON マニフェストでは、"favourite-colour-examples@mozilla.org" 拡張機能は次のようなコードを使ってデータにアクセスできます:</p>
<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">var</span> storageItem <span class="operator token">=</span> browser<span class="punctuation token">.</span>storage<span class="punctuation token">.</span>managed<span class="punctuation token">.</span><span class="keyword token">get</span><span class="punctuation token">(</span><span class="string token">'colour'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
storageItem<span class="punctuation token">.</span><span class="function token">then</span><span class="punctuation token">(</span><span class="punctuation token">(</span>res<span class="punctuation token">)</span> <span class="operator token">=</span><span class="operator token">></span> <span class="punctuation token">{</span>
console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span><span class="template-string token"><span class="string token">`Managed colour is: </span><span class="interpolation token"><span class="interpolation-punctuation punctuation token">${</span>res<span class="punctuation token">.</span>colour<span class="interpolation-punctuation punctuation token">}</span></span><span class="string token">`</span></span><span class="punctuation token">)</span><span class="punctuation token">;</span>
<span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
<h2 id="PKCS_11_manifests" name="PKCS_11_manifests">PKCS #11 マニフェスト</h2>
<p>PKCS #11 マニフェストは以下のプロパティを持った JSON オブジェクトを含むファイルです:</p>
<table class="fullwidth-table standard-table">
<thead>
<tr>
<th scope="col">名前</th>
<th scope="col">種類</th>
<th scope="col">説明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>name</code></td>
<td>String</td>
<td>
<p>PKCS #11 モジュールの名前です。</p>
<p><code>pkcs11</code> API で使われている名前と一致している必要があります。</p>
<p>OS X と Linux では、マニフェストの (拡張子を除いた) ファイル名とも一致していなければなりません。</p>
<p>Windows では、マニフェストの場所を記した作成済みレジストリキーの名前と一致している必要があります。</p>
<p>次の正規表現にマッチする必要があります: "^\w+(\.\w+)*$" つまり、名前には(大文字か小文字の)英数字とアンダースコア、ドットのみ含めることができます。最初または最後の文字にドットを使用することはできず、ドットを2つ以上連続させることもできません。</p>
</td>
</tr>
<tr>
<td><code>description</code></td>
<td>String</td>
<td>
<p>モジュールの説明です。</p>
<p>ブラウザー UI (例えば、Firefox の "Security Devices" ダイアログ) で表示される、読みやすい名前を付けるのに使われます。</p>
</td>
</tr>
<tr>
<td><code>path</code></td>
<td>String</td>
<td>
<p>モジュールのパスです。</p>
<p>Windows では、マニフェスト自身からの相対パスを指定することもできます。OS X や Linux では絶対パスでなければなりません。</p>
</td>
</tr>
<tr>
<td><code>type</code></td>
<td>String</td>
<td>"pkcs11" でなければなりません。</td>
</tr>
<tr>
<td><code>allowed_extensions</code></td>
<td>Array of String</td>
<td>
<p><a href="/ja/docs/Mozilla/Add-ons/WebExtensions/WebExtensions_and_the_Add-on_ID">Add-on ID</a> の配列です。配列中のそれぞれの値はモジュールとの通信が許可されている拡張機能を表します。</p>
<p>つまり、作成する拡張機能の manifest.json ファイルに <a href="/ja/docs/Mozilla/Add-ons/WebExtensions/manifest.json/applications">applications</a> キーを含めたくなるものと思われるため、開発中に明示的な ID を設定しておくと良いでしょう。</p>
</td>
</tr>
</tbody>
</table>
<p>例えば:</p>
<pre class="brush: json line-numbers language-json">{
"name": "my_module",
"description": "My test module",
"type": "pkcs11",
"path": "/path/to/libpkcs11testmodule.dylib",
"allowed_extensions": ["my-extension@mozilla.org"]
}</pre>
<p>この JSON マニフェストでは、"my_module.json" として保存すれば、"my-extension@mozilla.org" 拡張機能はこのようなコードから "/path/to/libpkcs11testmodule.dylib" のセキュリティーモジュールをインストールすることもできます:</p>
<pre class="brush: js line-numbers language-js">browser.pkcs11.installModule("my_module");</pre>
<h2 id="Manifest_location" name="Manifest_location">マニフェストの場所</h2>
<p>Linux と Mac OS X では、マニフェストを特定の場所に保管する必要があります。Windows では、マニフェストの場所を指定するレジストリキーを作成する必要があります。</p>
<p>詳しいルールはどのマニフェストの種類でも同じですが、例外として最後から2番目のパスのコンポーネントはマニフェストの種類を特定します。下記の例では、3種類のそれぞれの形を示しています。すべての例において、<em><name></em> はマニフェスト内の <code>name</code> プロパティの値です。</p>
<h3 id="Windows" name="Windows">Windows</h3>
<p>グローバルな設定としては、以下の名前のレジストリキーを作成します:</p>
<pre>HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\NativeMessagingHosts\<name>
HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\ManagedStorage\<name>
HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\PKCS11Modules\<name></pre>
<p>このキーにマニフェストへのパスを示す単一の既定の値を設定します。</p>
<p>Firefox バージョン 64 以降では、32ビットレジストリ view (<a href="https://en.wikipedia.org/wiki/WoW64#Registry_and_file_system">Wow6432Node) </a>がこれらのキーの中でまずチェックされ、"native" レジストリ view が続いてチェックされます。いずれの view にしてもアプリケーションにふさわしいレジストリを使用してください。</p>
<p><em>Firefox バージョン 63 以前では、もし32ビットのアプリケーションであっても、このキーは <a href="https://en.wikipedia.org/wiki/WoW64#Registry_and_file_system">Wow6432Node</a> 下に作成しないで下さい。以前のバージョンのブラウザは常に32-bit エミュレーションではなくレジストリの "native" view 下のキーを探します。確実に "native" view にキーを作成するために、KEY_WOW64_64KEY または KEY_WOW64_32KEY フラグを RegCreateKeyEx に渡すことができます。<a href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa384129(v=vs.85).aspx">Accessing an Alternate Registry View</a> を参照して下さい。</em></p>
<p>ユーザごとの設定としては、以下の名前のレジストリキーを作成します:</p>
<pre>HKEY_CURRENT_USER\SOFTWARE\Mozilla\NativeMessagingHosts\<name>
HKEY_CURRENT_USER\SOFTWARE\Mozilla\ManagedStorage\<name>
HKEY_CURRENT_USER\SOFTWARE\Mozilla\PKCS11Modules\<name></pre>
<p>このキーにマニフェストへのパスを示す単一の既定の値を設定します。</p>
<h3 id="Mac_OS_X" name="Mac_OS_X">Mac OS X</h3>
<p>グローバルな設定としては、マニフェストを以下に配置します:</p>
<pre>/Library/Application Support/Mozilla/NativeMessagingHosts/<name>.json
/Library/Application Support/Mozilla/ManagedStorage/<name>.json
/Library/Application Support/Mozilla/PKCS11Modules/<name>.json</pre>
<p>個人ごとの設定としては、マニフェストを以下に配置します:</p>
<pre>~/Library/Application Support/Mozilla/NativeMessagingHosts/<name>.json
~/Library/Application Support/Mozilla/ManagedStorage/<name>.json
~/Library/Application Support/Mozilla/PKCS11Modules/<name>.json
</pre>
<h3 id="Linux" name="Linux">Linux</h3>
<p>グローバルな設定としては、マニフェストを以下のいずれかに配置します:</p>
<pre>/usr/lib/mozilla/native-messaging-hosts/<name>.json
/usr/lib/mozilla/managed-storage/<name>.json
/usr/lib/mozilla/pkcs11-modules/<name>.json
</pre>
<p>あるいは:</p>
<pre>/usr/lib64/mozilla/native-messaging-hosts/<name>.json
/usr/lib64/mozilla/managed-storage/<name>.json
/usr/lib64/mozilla/pkcs11-modules/<name>.json</pre>
<p>個人ごとの設定としては、マニフェストを以下に配置します:</p>
<pre>~/.mozilla/native-messaging-hosts/<name>.json
~/.mozilla/managed-storage/<name>.json
~/.mozilla/pkcs11-modules/<name>.json</pre>
|