Нативные манифесты
Нативные манифесты — это файлы JSON со специальным форматом, которые размещаются на компьютере пользователя каким-либо способом, не связанным с процессом установки расширения. Например, нативный манифест может быть предоставлен администратором устройства или установщиком нативного приложения.
Существует три типа нативных манифестов:
| Нативные манифесты обмена сообщениями | Включают функцию нативного обмена сообщениями, позволяющую расширению обмениваться сообщениями с нативным приложением, установленным на устройстве. |
| Нативные манифесты управляемого хранилища | Определяют доступные для чтения данные, к которым расширение может получить доступ, используя API storage.managed. |
| Нативные манифесты PKCS #11 | Позволяют расширению использовать API pkcs11 для перечисления модулей безопасности PKCS #11 и их установки в Firefox. |
Для всех нативных манифестов необходимо позаботиться о том, чтобы браузер мог их найти. Раздел местоположения манифеста описывает эти правила.
Нативные манифесты обмена сообщениями
Нативный манифест обмена сообщениями содержит единственный объект JSON со следующими свойствами:
| Имя | Тип | Описание |
|---|---|---|
name | Строка | Имя нативного приложения. Оно должно совпадать с именем, переданным в В macOS и Linux оно также должно совпадать с именем файла нативного манифеста (без В Windows оно должно совпадать с именем создаваемого вами ключа реестра, содержащего расположение нативного манифеста обмена сообщениями. Имя должно соответствовать следующему регулярному выражению: |
description | Строка | Описание нативного приложения. |
path | Строка | Путь к нативному приложению. В Windows он может быть относительным к самому манифесту. В macOS и Linux он должен быть абсолютным. |
type | Строка | Описывает метод подключения расширения к приложению. В настоящее время здесь может быть только одно значение — |
allowed_extensions | Массив строк | Массив значений 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 подключиться, передав имя ping_pong в соответствующую функцию API runtime. Само приложение находится по адресу /path/to/native-messaging/app/ping_pong.py.
Нативные манифесты управляемого хранилища
Нативный манифест управляемого хранилища содержит единственный объект JSON со следующими свойствами:
| Имя | Тип | Описание |
|---|---|---|
name | Строка | Идентификатор расширения, которое может получить доступ к этому хранилищу, указанный как ID, указанный вами в ключе |
description | Строка | Описание, понятное для человека, игнорируется Firefox. |
type | Строка | Это должно быть |
data | Объект | Объект JSON, который может содержать любые допустимые значения JSON, включая строки, числа, булевы значения, массивы или объекты. Это данные в области хранилища |
Например:
{ "name": "favourite-color-examples@mozilla.org", "description": "ignored", "type": "storage", "data": { "color": "management thinks it should be blue!" } }
С этим манифестом JSON расширение favourite-color-examples@mozilla.org могло бы получить доступ к данным с помощью кода такого рода:
let storageItem = browser.storage.managed.get('color'); storageItem.then((res) => { console.log(`Managed color is: ${res.color}`); });
Нативные манифесты PKCS #11
Нативный манифест PKCS #11 — это файл, содержащий объект JSON со следующими свойствами:
| Имя | Тип | Описание |
|---|---|---|
name | Строка | Имя модуля PKCS #11. Оно должно совпадать с именем, используемым в API В macOS и Linux оно также должно совпадать с именем файла манифеста (без расширения). В Windows оно должно совпадать с именем создаваемого вами ключа реестра, который содержит расположение манифеста. Имя должно соответствовать следующему регулярному выражению: |
description | Строка | Описание модуля. Используется для задания дружественного имени модуля в пользовательском интерфейсе браузера (например, в диалоговом окне «Устройства безопасности» в Firefox). |
path | Строка | Путь к модулю. В Windows он может быть относительным к самому манифесту. В macOS и Linux он должен быть абсолютным. |
type | Строка | Это должно быть "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
или:
/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
© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_manifests