原生 manifest

原生清单是用户计算机上通过扩展安装流程以外的其他方式提供的 JSON 文件。例如,原生清单可能由设备管理员或原生应用程序安装程序提供。

原生清单有三种类型

原生消息清单 启用名为 原生消息 的功能,扩展程序可以通过该功能与设备上安装的原生应用程序进行通信。
托管存储清单 定义扩展程序可以使用 storage.managed API 访问的只读数据。
PKCS #11 清单 使扩展程序能够使用 pkcs11 API 来枚举 PKCS #11 安全模块并将其安装到 Firefox 中。

对于所有原生清单,您需要存储该文件,以便浏览器能够找到它。 清单位置 部分将说明如何执行此操作。在 Linux 和 macOS 上,文件位于固定位置;在 Windows 上,文件位置会写入 Windows 注册表。

原生消息清单

原生消息清单是一个文件,其名称与扩展程序传递到 runtime.connectNative()runtime.sendNativeMessage() 的字符串匹配,并带有 .json 扩展名。它包含一个具有以下属性的 JSON 对象:

名称 类型 描述
name String

原生应用程序的名称。

此名称必须与扩展程序传递到 runtime.connectNative()runtime.sendNativeMessage() 的名称匹配。

在 Windows 上,使用此值作为您创建的注册表项的名称,该注册表项包含原生消息清单的位置。

名称必须匹配正则表达式:"^\w+(\.\w+)*$"。这意味着它只能包含(小写或大写)字母数字字符、下划线和点。它不能以点开头或结尾,并且点后面不能再跟另一个点。

description String 原生应用程序的描述。
路径 String

原生应用程序的路径。

在 Windows 上,这可以是相对于清单本身的。在 macOS 和 Linux 上,它必须是绝对路径。

type String

描述用于连接扩展程序和应用程序的方法。

只接受值 "stdio",这表示应用程序通过标准输入 (stdin) 接收消息,并通过标准输出 (stdout) 发送消息。

allowed_extensions 字符串数组

一个 插件 ID 值的数组。每个值代表一个允许与此原生应用程序通信的扩展程序。

注意:这意味着您需要在扩展程序的 manifest.json 文件中包含 browser_specific_settings 键,以便在开发过程中设置显式 ID。

例如,这是 原生消息示例ping_pong 原生应用程序的 ping_pong.json 清单文件的内容:

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,以扩展程序的 browser_specific_settings 键中指定的 ID 给出。

在 Windows 上,将其用作您创建的注册表项的名称,该注册表项包含清单的位置。

description String 人类可读的描述,Firefox 忽略。
type String

这必须是 "storage"

data Object

一个 JSON 对象,其中可以包含任何有效的 JSON 值,包括字符串、数字、布尔值、数组或对象。这成为 browser.storage.managed 存储区域中的数据。

例如,在 favourite-colour 示例 中,托管存储数据设置在名为 favourite-colour-examples@mozilla.org.json 的文件中,该文件包含:

json
{
  "name": "favourite-colour-examples@mozilla.org",
  "description": "ignored",
  "type": "storage",
  "data": {
    "color": "management thinks it should be blue!"
  }
}

然后,favourite-colour-examples@mozilla.org 扩展程序使用如下代码访问数据:

js
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 模块的名称。

此名称必须与 pkcs11 API 中使用的名称匹配。

在 Windows 上,将其用作您创建的注册表项的名称,该注册表项包含清单的位置。

名称必须匹配正则表达式:"^\w+(\.\w+)*$"。这意味着它只能包含小写字母数字字符、下划线和点。它不能以点开头或结尾,并且点后面不能再跟另一个点。

description String

PKCS #11 模块的描述。

这将在浏览器 UI 中设置模块的友好名称(例如,Firefox 中的“安全设备”对话框)。

路径 String

PKCS #11 模块的路径。

PKCS #11 模块的路径可以是绝对路径,也可以是相对于清单本身的相对路径。

type String 这必须是 "pkcs11"
allowed_extensions 字符串数组

一个 插件 ID 值的数组。每个值代表一个允许与该模块交互的扩展程序。

注意:这意味着您需要在扩展程序的 manifest.json 文件中包含 browser_specific_settings 键,以便在开发过程中设置显式 ID。

例如

json
{
  "name": "my_module",
  "description": "My test module",
  "type": "pkcs11",
  "path": "/path/to/libpkcs11testmodule.dylib",
  "allowed_extensions": ["my-extension@mozilla.org"]
}

给定此 JSON 清单,保存为 my_module.jsonmy-extension@mozilla.org 扩展程序可以使用如下代码安装位于 /path/to/libpkcs11testmodule.dylib 的安全模块:

js
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_64KEYKEY_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