原生 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