--- title: 原生应用清单 slug: Mozilla/Add-ons/WebExtensions/Native_manifests translation_of: Mozilla/Add-ons/WebExtensions/Native_manifests ---
原生应用清单是一个符合特定规则的JSON文件,它应该使用与 extension 不同的安装方式存放在用户的计算机上。举个例子,原生应用清单是由设备管理员或者通过原生应用安装器提供的。
有三种不同的原生应用清单:
原生应用通信清单 |
定义关于 与本地应用通信 的功能:哪一个 extension 可以与本机的原生应用交换信息。 |
存储管理清单 |
定义一些 extension 可以用 {{WebExtAPIRef("storage.managed")}} 读取的只读数据。 |
PKCS #11 清单 |
定义了 extension 使用 {{WebExtAPIRef("pkcs11")}} API 去枚举 PKCS #11 安全模型 并在Firefox安装它们。 |
对于所有的原生应用清单,你需要做一些工作以便于浏览器可以找到它们。这些规则在 清单路径 章节。
原生应用通信清单中包含单个JSON对象,对象具有如下属性:
Name | Type | Description |
---|---|---|
name |
String |
原生应用的名字 它必须与 extension 调用 {{WebExtAPIRef("runtime.connectNative()")}} 和 {{WebExtAPIRef("runtime.sendNativeMessage()")}} 时传入的名称保持一致。 在 OS X 和 Linux 中,它必须和清单文件的文件名保持一致(除.json文件扩展名外)。 在 Windows 中,它必须和你创建的包含原生应用清单路径的注册表一致。 它必须符合正则表达式 "^\w+(\.\w+)*$"。这意味着它只能包含小写字母、数字、下划线和 |
description |
String |
关于这个原生应用的描述。 |
path |
String |
到原生应用的路径。 在 Windows 中,这可以是一个相对路径。在 OS X 和 Linux 中,必须是绝对路径。 |
type |
String |
定义 extension 和原生应用的连接方法。 目前只支持一种值,那就是 stdio。该值表示应用使用标准输入(stdin)来接受消息,用标准输出(stdout)来发送消息。 |
allowed_extensions |
Array of String |
由 Add-on ID 组成的数组。每个值代表允许ID为该值的 extension 与这个原生应用通信。 这意味着你可能需要在你 extension 的 manifest.json 中包含 applications 字段,并为 extension 设置一个显示的ID,哪怕是在开发时 |
举个例子,这是 ping_pong 原生应用的原生应用通信清单:
{ "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" ] }
清单表示:它允许ID为 ping_pong@example.org 的 extension 通过传入 ping_pong 给 {{WebExtAPIRef("runtime")}} 与自己连接。原生应用自身在 /path/to/native-messaging/app/ping_pong.py 中。
存储管理清单中包含单个JSON对象,对象具有如下属性:
Name | Type | Description |
---|---|---|
name |
String |
一个 extension 的 ID,表示这个 extension 可以读取这个仓库。 给出这个ID需要你的 extension 的 manifest.json 文件包含 applications 字段。 |
description |
String |
人类可读的描述,Firefox会忽略它。 |
type |
String |
该值只能是 |
data |
Object |
一个JSON对象,其中可以包含任何合法的JSON值(string、number、boolean、array、object),他们将成为 |
举个例子:
{
"name": "favourite-colour-examples@mozilla.org",
"description": "ignored",
"type": "storage",
"data":
{
"colour": "management thinks it should be blue!"
}
}
在给出的清单文件中,ID 为 favourite-colour-examples@mozilla.org 的 extension 有权限使用清单中的 data 字段中的数据,代码如下:
var storageItem = browser.storage.managed.get('colour');
storageItem.then((res) => {
console.log(`Managed colour is: ${res.colour}`);
});
PKCS #11 清单中包含单个JSON对象,对象具有如下属性:
Name | Type | Description |
---|---|---|
name |
String |
PKCS #11 模块的名字。 它必须和你使用 在 OS X 和 Linux 中,它必须和清单文件的文件名保持一致(除文件扩展名外) 在 Windows 中,它必须和你创建的包含原生应用清单路径的注册表一致。 它必须符合正则表达式 "^\w+(\.\w+)*$"。这意味着它只能包含小写字母、数字、下划线和 |
description |
String |
关于该模块的描述。 它将被用在浏览器界面中为模块设置一个友好的名字(比如,在Firefox的“安全设备”对话框中) |
path |
String |
到模块的路径。 在 Windows 中,这可以是一个相对路径。在 OS X 和 Linux 中,必须是绝对路径。 |
type |
String | 该值只能是pkcs11 。 This must be "pkcs11". |
allowed_extensions |
Array of String |
由 Add-on ID 组成的数组。每个值代表允许ID为该值的 extension 与这个模块通信。 这意味着你可能需要在你 extension 的 manifest.json 中包含 applications 字段,并为 extension 设置一个显示的ID,哪怕是在开发时 |
举个例子:
{ "name": "my_module", "description": "My test module", "type": "pkcs11", "path": "/path/to/libpkcs11testmodule.dylib", "allowed_extensions": ["my-extension@mozilla.org"] }
给出的这个JSON清单,保存为 my_module.json,ID为 my-extension@mozilla.org 的 extension 就能够使用类似于如下代码安装 /path/to/libpkcs11testmodule.dylib 安全模块:
browser.pkcs11.installModule("my_module");
在 Linux 和 Mac OS X 中,你需要将清单文件存在特定的位置。在 Windows 中,你需要创建一个注册表来指向清单文件。
所有类型的清单的详细规则都是相同的,除了倒数第二个的 type 字段表示了清单的类型。下面的例子展示了三种不同类型的清单。在例子中,<name> 代表清单中的 name 字段值。
如果想要全局可见,使用下面的路径创建注册表:
HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\NativeMessagingHosts\<name>
HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\ManagedStorage
\<name>
HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\PKCS11Modules\<name>
注册表应该有单个默认值,值里存放“到清单文件的路径”。比如为原生应用通信清单建立的注册表差不多是这样:
对于原生应用清单,即使原生应用是32位的,也不能在 Wow6432Node 下创建注册表。浏览器将总会在 native 视图下寻找注册表的,而不是32位放在环境。确保注册表的创建在原生视图中,你可以键入KEY_WOW64_64KEY 或 KEY_WOW64_32KEY 到 RegCreateKeyEx。请参考:Accessing an Alternate Registry View
如果想要用户级别的可见,使用下面的路径创建注册表:
HKEY_CURRENT_USER\SOFTWARE\Mozilla\NativeMessagingHosts\<name>
HKEY_CURRENT_USER\SOFTWARE\Mozilla\ManagedStorage
\<name>
HKEY_CURRENT_USER\SOFTWARE\Mozilla\PKCS11Modules\<name>
注册表应该有单个默认值,值里存放“到清单文件的路径”。
如果想要全局可见,将清单文件存放在:
/Library/Application Support/Mozilla/NativeMessagingHosts/<name>.json
/Library/Application Support/Mozilla/ManagedStorage
/<name>.json
/Library/Application Support/Mozilla/PKCS11Modules/<name>.json
如果想要用户级别的可见,将清单文件存放在:
~/Library/Application Support/Mozilla/NativeMessagingHosts/<name>.json
~/Library/Application Support/Mozilla/ManagedStorage
/<name>.json
~/Library/Application Support/Mozilla/PKCS11Modules/<name>.json
如果想要全局可见,将清单文件存放在:
/usr/lib/mozilla/native-messaging-hosts/<name>.json
/usr/lib/mozilla/managed-storage
/<name>.json
/usr/lib/mozilla/pkcs11-modules/<name>.json
或者:
/usr/lib64/mozilla/native-messaging-hosts/<name>.json
/usr/lib64/mozilla/managed-storage
/<name>.json
/usr/lib64/mozilla/pkcs11-modules/<name>.json
如果想要用户级别的可见,将清单文件存放在:
~/.mozilla/native-messaging-hosts/<name>.json
~/.mozilla/managed-storage
/<name>.json
~/.mozilla/pkcs11-modules/<name>.json