原生 manifest
原生清单是用户计算机上通过扩展安装流程以外的其他方式提供的 JSON 文件。例如,原生清单可能由设备管理员或原生应用程序安装程序提供。
原生清单有三种类型
| 原生消息清单 | 启用名为 原生消息 的功能,扩展程序可以通过该功能与设备上安装的原生应用程序进行通信。 |
| 托管存储清单 | 定义扩展程序可以使用 storage.managed API 访问的只读数据。 |
| PKCS #11 清单 | 使扩展程序能够使用 pkcs11 API 来枚举 PKCS #11 安全模块并将其安装到 Firefox 中。 |
对于所有原生清单,您需要存储该文件,以便浏览器能够找到它。 清单位置 部分将说明如何执行此操作。在 Linux 和 macOS 上,文件位于固定位置;在 Windows 上,文件位置会写入 Windows 注册表。
原生消息清单
原生消息清单是一个文件,其名称与扩展程序传递到 runtime.connectNative() 或 runtime.sendNativeMessage() 的字符串匹配,并带有 .json 扩展名。它包含一个具有以下属性的 JSON 对象:
| 名称 | 类型 | 描述 |
|---|---|---|
name |
String |
原生应用程序的名称。 此名称必须与扩展程序传递到 在 Windows 上,使用此值作为您创建的注册表项的名称,该注册表项包含原生消息清单的位置。 名称必须匹配正则表达式: |
description |
String | 原生应用程序的描述。 |
路径 |
String |
原生应用程序的路径。 在 Windows 上,这可以是相对于清单本身的。在 macOS 和 Linux 上,它必须是绝对路径。 |
type |
String |
描述用于连接扩展程序和应用程序的方法。 只接受值 |
allowed_extensions |
字符串数组 |
一个 插件 ID 值的数组。每个值代表一个允许与此原生应用程序通信的扩展程序。
注意:这意味着您需要在扩展程序的 |
例如,这是 原生消息示例 中 ping_pong 原生应用程序的 ping_pong.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"]
}
这允许 ID 为 ping_pong@example.org 的扩展程序通过将名称 ping_pong 传递给相关的 runtime API 函数进行连接。原生应用程序位于 /path/to/native-messaging/app/ping_pong.py。
托管存储清单
托管存储清单是一个文件,其名称与扩展程序的 browser_specific_settings 键中指定的 ID 匹配,并带有 .json 扩展名。它包含一个具有以下属性的 JSON 对象:
| 名称 | 类型 | 描述 |
|---|---|---|
name |
String |
可以访问此存储的扩展程序的 ID,以扩展程序的 在 Windows 上,将其用作您创建的注册表项的名称,该注册表项包含清单的位置。 |
description |
String | 人类可读的描述,Firefox 忽略。 |
type |
String |
这必须是 |
data |
Object |
一个 JSON 对象,其中可以包含任何有效的 JSON 值,包括字符串、数字、布尔值、数组或对象。这成为 |
例如,在 favourite-colour 示例 中,托管存储数据设置在名为 favourite-colour-examples@mozilla.org.json 的文件中,该文件包含:
{
"name": "favourite-colour-examples@mozilla.org",
"description": "ignored",
"type": "storage",
"data": {
"color": "management thinks it should be blue!"
}
}
然后,favourite-colour-examples@mozilla.org 扩展程序使用如下代码访问数据:
let storageItem = browser.storage.managed.get("color");
storageItem.then((res) => {
console.log(`Managed color is: ${res.color}`);
});
PKCS #11 清单
PKCS #11 清单是一个文件,其名称与 PKCS #11 模块的名称(如 pkcs11 API 中使用)匹配,并带有 .json 扩展名。它包含一个具有以下属性的 JSON 对象:
| 名称 | 类型 | 描述 |
|---|---|---|
name |
String |
PKCS #11 模块的名称。 此名称必须与 在 Windows 上,将其用作您创建的注册表项的名称,该注册表项包含清单的位置。 名称必须匹配正则表达式: |
description |
String |
PKCS #11 模块的描述。 这将在浏览器 UI 中设置模块的友好名称(例如,Firefox 中的“安全设备”对话框)。 |
路径 |
String |
PKCS #11 模块的路径。 PKCS #11 模块的路径可以是绝对路径,也可以是相对于清单本身的相对路径。 |
type |
String | 这必须是 "pkcs11"。 |
allowed_extensions |
字符串数组 |
一个 插件 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,my-extension@mozilla.org 扩展程序可以使用如下代码安装位于 /path/to/libpkcs11testmodule.dylib 的安全模块:
browser.pkcs11.installModule("my_module");
清单位置
在 Linux 和 macOS 上,您需要将清单存储在特定位置。在 Windows 上,您需要创建一个指向清单位置的注册表项。
详细规则对所有清单类型都相同,只是路径的倒数第二个组件标识了清单的类型。以下示例显示了三种不同类型的清单的格式。在所有示例中,<name> 是原生清单中 name 属性的值。
Windows
为了全局可见性,请创建一个具有以下名称的注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\NativeMessagingHosts\<name>
HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\ManagedStorage\<name>
HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\PKCS11Modules\<name>
该键应该有一个默认值,即清单的路径。
警告:从 Firefox 64 开始,首先检查 32 位注册表视图 Wow6432Node,然后检查“原生”注册表视图。请根据您的应用程序使用适当的视图。
对于 Firefox 63 及更早版本:此键不应创建在 Wow6432Node 下,即使应用程序是 32 位的。先前版本的浏览器始终会在注册表的“原生”视图下查找该键,而不是 32 位模拟视图。为确保该键创建在“原生”视图中,您可以将 KEY_WOW64_64KEY 或 KEY_WOW64_32KEY 标志传递给 RegCreateKeyEx。请参阅 访问备用注册表视图。
为了用户可见性,请创建一个具有以下名称的注册表项:
HKEY_CURRENT_USER\SOFTWARE\Mozilla\NativeMessagingHosts\<name>
HKEY_CURRENT_USER\SOFTWARE\Mozilla\ManagedStorage\<name>
HKEY_CURRENT_USER\SOFTWARE\Mozilla\PKCS11Modules\<name>
该键应该有一个默认值,即清单的路径。
macOS
为了全局可见性,请将清单存储在:
/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
Linux
为了全局可见性,请将清单存储在以下任一位置:
/usr/lib/mozilla/native-messaging-hosts/<name>.json
/usr/lib/mozilla/managed-storage/<name>.json
/usr/lib/mozilla/pkcs11-modules/<name>.json
or
/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