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