Skip to content

Commit

Permalink
minor fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
yin1999 committed Jul 9, 2023
1 parent f8a267f commit 08a2094
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 72 deletions.
137 changes: 65 additions & 72 deletions files/zh-cn/mozilla/add-ons/webextensions/native_manifests/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,41 +5,40 @@ slug: Mozilla/Add-ons/WebExtensions/Native_manifests

{{AddonSidebar}}

原生应用清单是一个符合特定规则的 JSON 文件,它应该使用与 extension 不同的安装方式存放在用户的计算机上。举个例子,原生应用清单是由设备管理员或者通过原生应用安装器提供的。
原生应用清单是一个符合特定规则的 JSON 文件,它应该使用与扩展不同的安装方式存放在用户的计算机上。举个例子,原生应用清单是由设备管理员或者通过原生应用安装器提供的。

有三种不同的原生应用清单:

<table class="standard-table">
<tbody>
<tr>
<td>
<a href="#native_messaging_manifests">原生应用通信清单</a>
<a href="#原生应用通信清单">原生应用通信清单</a>
</td>
<td>
开启一个叫<a href="/zh-CN/docs/Mozilla/Add-ons/WebExtensions/Native_messaging">原生通信</a>的功能:使
extension 可以与本机的原生应用交换信息。
启用<a href="/zh-CN/docs/Mozilla/Add-ons/WebExtensions/Native_messaging">原生通信</a>特性:使扩展可以与本机的原生应用通信。
</td>
</tr>
<tr>
<td>
<a href="#managed_storage_manifests">存储管理清单</a>
<a href="#存储管理清单">存储管理清单</a>
</td>
<td>
定义一些 extension 可以用
定义一些扩展可以用
{{WebExtAPIRef("storage.managed")}} API 读取的只读数据。
</td>
</tr>
<tr>
<td><a href="#pkcs_11_manifests">PKCS #11 清单</a></td>
<td><a href="#pkcs_11_清单">PKCS #11 清单</a></td>
<td>
定义了 extension 使用 {{WebExtAPIRef("pkcs11")}} API 去枚举
PKCS #11 安全模型 并在 Firefox 安装它们。
定义了扩展使用 {{WebExtAPIRef("pkcs11")}} API 去枚举
PKCS #11 安全模型并在 Firefox 安装它们。
</td>
</tr>
</tbody>
</table>

对于所有的原生应用清单,你需要做一些工作以便于浏览器可以找到它们。这些规则在 [清单路径](#清单路径) 章节。
对于所有的原生应用清单,你需要做一些工作以便于浏览器可以找到它们。这些规则在[清单路径](#清单路径)章节。

## 原生应用通信清单

Expand All @@ -48,19 +47,19 @@ slug: Mozilla/Add-ons/WebExtensions/Native_manifests
<table class="fullwidth-table standard-table">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Type</th>
<th scope="col">Description</th>
<th scope="col">名称</th>
<th scope="col">类型</th>
<th scope="col">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>name</code></td>
<td>String</td>
<td>字符串</td>
<td>
<p>原生应用的名字</p>
<p>原生应用的名字</p>
<p>
它必须与 extension 调用
它必须与扩展调用
{{WebExtAPIRef("runtime.connectNative()")}} 和
{{WebExtAPIRef("runtime.sendNativeMessage()")}}
时传入的名称保持一致。
Expand All @@ -72,32 +71,31 @@ slug: Mozilla/Add-ons/WebExtensions/Native_manifests
</p>
<p>
它必须符合正则表达式
<code>"^\w+(\.\w+)*$"</code>。这意味着它只能包含大小写字母、数字、下划线和
<code>.</code> 。开头或结束不能是是 <code>.</code> ,并且 <code>.</code> 后面不能是 <code>.</code> 。
<code>"^\w+(\.\w+)*$"</code>。这意味着它只能包含大小写字母、数字、下划线和点。开头或结尾不能是是点,并且点后面不能再跟一个点。
</p>
</td>
</tr>
<tr>
<td><code>description</code></td>
<td>String</td>
<td>字符串</td>
<td>关于这个原生应用的描述。</td>
</tr>
<tr>
<td><code>path</code></td>
<td>String</td>
<td>字符串</td>
<td>
<p>原生应用的路径。</p>
<p>
在 Windows 中,这可以是一个相对路径(相对于 manifest)。在 MacOS 和 Linux
在 Windows 中,这可以是一个相对路径(相对于清单)。在 MacOS 和 Linux
中,必须是绝对路径。
</p>
</td>
</tr>
<tr>
<td><code>type</code></td>
<td>String</td>
<td>字符串</td>
<td>
<p>描述 extension 和原生应用的连接方法。</p>
<p>描述扩展和原生应用的连接方法。</p>
<p>
目前只支持一种值,那就是
<code>"stdio"</code>。该值表示应用使用标准输入(<code>stdin</code>)来接受消息,用标准输出(<code>stdout</code>)来发送消息。
Expand All @@ -106,18 +104,17 @@ slug: Mozilla/Add-ons/WebExtensions/Native_manifests
</tr>
<tr>
<td><code>allowed_extensions</code></td>
<td>Array of String</td>
<td>字符串数组</td>
<td>
<p>
<a
由<a
href="https://extensionworkshop.com/documentation/develop/extensions-and-the-add-on-id/"
>Add-on ID</a
>附加组件 ID</a
>
组成的数组。每个值代表允许 ID 为该值的 extension 与这个原生应用通信
组成的数组。每个值代表允许 ID 为该值的扩展与这个原生应用通信
</p>
<p>
请注意这意味着你可能需要在你 extension 的 <code>manifest.json</code> 文件中包含
请注意这意味着你可能需要在你扩展的 <code>manifest.json</code> 文件中包含
<code
><a
href="/zh-CN/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings"
Expand All @@ -131,7 +128,7 @@ slug: Mozilla/Add-ons/WebExtensions/Native_manifests
</tbody>
</table>

举个例子,这是 ping_pong 原生应用的原生应用通信清单
举个例子,这是 `ping_pong` 原生应用的清单

```json
{
Expand All @@ -143,7 +140,7 @@ slug: Mozilla/Add-ons/WebExtensions/Native_manifests
}
```

这允许 ID 为 `[email protected]` 的 extension 通过 `ping_pong` 的名字传入给相关 {{WebExtAPIRef("runtime")}} API 函数进行连接。原生应用自身在 `/path/to/native-messaging/app/ping_pong.py` 中。
这允许 ID 为 `[email protected]` 的扩展通过 `ping_pong` 的名字传入给相关 {{WebExtAPIRef("runtime")}} API 函数进行连接。原生应用自身在 `/path/to/native-messaging/app/ping_pong.py` 中。

## 存储管理清单

Expand All @@ -152,18 +149,18 @@ slug: Mozilla/Add-ons/WebExtensions/Native_manifests
<table class="fullwidth-table standard-table">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Type</th>
<th scope="col">Description</th>
<th scope="col">名称</th>
<th scope="col">类型</th>
<th scope="col">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>name</code></td>
<td>String</td>
<td>字符串</td>
<td>
<p>
可以访问此存储的扩展的 ID,与你在 extension 中
可以访问此存储的扩展的 ID,与你在扩展中
<code
><a
href="/zh-CN/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings"
Expand All @@ -176,23 +173,22 @@ slug: Mozilla/Add-ons/WebExtensions/Native_manifests
</tr>
<tr>
<td><code>description</code></td>
<td>String</td>
<td>字符串</td>
<td>人类可读的描述,Firefox 会忽略它</td>
</tr>
<tr>
<td><code>type</code></td>
<td>String</td>
<td>字符串</td>
<td>
<p>该值只能是 <code>"storage"</code>.</p>
<p>该值只能是 <code>"storage"</code></p>
</td>
</tr>
<tr>
<td><code>data</code></td>
<td>Object</td>
<td>对象</td>
<td>
<p>
一个 JSON 对象,其中可以包含任何合法的 JSON 值,包括
string、number、boolean、array、object),他们将成为 <code>browser.storage.managed</code> 存储区域中的数据。
一个 JSON 对象,其中可以包含任何合法的 JSON 值,包括字符串、数字、布尔值、数组、对象,它们将成为 <code>browser.storage.managed</code> 存储区域中的数据。
</p>
</td>
</tr>
Expand All @@ -213,7 +209,7 @@ slug: Mozilla/Add-ons/WebExtensions/Native_manifests
}
```

在给出的清单文件中,ID 为 `[email protected]` 的 extension 有权限使用清单中的 data 字段中的数据,代码如下
根据给出的 JSON 清单,`[email protected]` 扩展可以像这样访问数据

```js
let storageItem = browser.storage.managed.get('color');
Expand All @@ -229,33 +225,32 @@ PKCS #11 清单中包含单个 JSON 对象,对象具有如下属性:
<table class="fullwidth-table standard-table">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Type</th>
<th scope="col">Description</th>
<th scope="col">名称</th>
<th scope="col">类别</th>
<th scope="col">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>name</code></td>
<td>String</td>
<td>字符串</td>
<td>
<p>PKCS #11 模块的名字。</p>
<p>它必须和你使用 <code>pkcs11</code> API 时的名字一致。</p>
<p>
在 MacOS 和 Linux 中,它必须和清单文件的文件名保持一致(除文件扩展名外)
在 MacOS 和 Linux 中,它必须和清单文件的文件名保持一致(除文件扩展名外)
</p>
<p>在 Windows 中,它必须与你创建的注册表键的名称相匹配,该注册表键包含本地·manifest·的位置
<p>在 Windows 中,它必须与你创建的注册表键的名称相匹配,该注册表键包含了清单的文件位置。
</p>
<p>
它必须符合正则表达式
<code>"^\w+(\.\w+)*$"</code>。这意味着它只能包含小写字母、数字、下划线和
<code>.</code> 。开头或结束不能是是 <code>.</code> ,并且 <code>.</code> 后面不能是 <code>.</code> 。
<code>"^\w+(\.\w+)*$"</code>。这意味着它只能包含小写字母、数字、下划线和点。开头或结尾不能是点,并且点后面不能再跟一个点。
</p>
</td>
</tr>
<tr>
<td><code>description</code></td>
<td>String</td>
<td>字符串</td>
<td>
<p>模块的描述。</p>
<p>
Expand All @@ -270,31 +265,31 @@ PKCS #11 清单中包含单个 JSON 对象,对象具有如下属性:
<td>
<p>模块的路径。</p>
<p>
在 Windows 中,这可以是一个相对于 manifest 的路径。在 MacOS 和 Linux
在 Windows 中,这可以是一个相对于清单的路径。在 MacOS 和 Linux
中,必须是绝对路径。
</p>
</td>
</tr>
<tr>
<td><code>type</code></td>
<td>String</td>
<td>该值只能是 <code>pkcs11</code>。</td>
<td>字符串</td>
<td>该值只能是 <code>"pkcs11"</code>。</td>
</tr>
<tr>
<td><code>allowed_extensions</code></td>
<td>Array of String</td>
<td>字符串数组</td>
<td>
<p>
<a
href="https://extensionworkshop.com/documentation/develop/extensions-and-the-add-on-id/"
>Add-on ID</a
>
组成的数组。每个值代表允许 ID 为该值的 extension 与这个模块通信
组成的数组。每个值代表允许 ID 为该值的扩展与这个模块通信
</p>
<div class="notecard note">
<p>
请注意这意味着你可能需要在你 extension 的 <code>manifest.json</code> 文件中包含
<strong>备注:</strong>这意味着你可能需要在你扩展的 <code>manifest.json</code> 文件中包含
<code
><a
href="/zh-CN/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings"
Expand All @@ -321,7 +316,7 @@ PKCS #11 清单中包含单个 JSON 对象,对象具有如下属性:
}
```

给出的这个 JSON 清单,保存为 my_module.json,ID 为 `[email protected]` 的 extension 就能够使用类似于如下代码安装 /path/to/libpkcs11testmodule.dylib 安全模块:
给出的这个 JSON 清单,保存为 `my_module.json``[email protected]` 这个插件就能够使用类似于如下代码安装 `/path/to/libpkcs11testmodule.dylib` 安全模块:

```js
browser.pkcs11.installModule("my_module");
Expand All @@ -331,7 +326,7 @@ browser.pkcs11.installModule("my_module");

在 Linux 和 macOS 中,你需要将清单文件存在特定的位置。在 Windows 中,你需要创建一个注册表键来指向清单文件。

所有类型的清单的详细规则都是相同的,除了倒数第二个的 type 字段表示了清单的类型。下面的例子展示了三种不同类型的清单。在例子中, `<name>` 代表清单中的 `name` 字段值。
所有类型的清单的详细规则都是相同的,除了倒数第二个的 type 字段表示了清单的类型。下面的例子展示了三种不同类型的清单。在例子中,`<name>` 代表清单中的 `name` 字段值。

### Windows

Expand All @@ -349,15 +344,13 @@ HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\ManagedStorage\<name>
HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\PKCS11Modules\<name>
```

注册表应该有单个默认值,值里存放“到清单文件的路径”。比如为原生应用通信清单建立的注册表差不多是这样:

![为原生应用通信清单建立的注册表](native-message-regkey-exaple.png)
注册表应该有单个默认值,值里存放到清单文件的路径。

> **警告:** 从 Firefox 64 开始,将首先检查 32 位注册表视图 [Wow6432Node](https://zh.wikipedia.org/wiki/WoW64#Registry_and_file_system) 的键,然后是 "native" 注册表视图。请使用适合你的应用程序的那一个。
> **警告:** 从 Firefox 64 开始,将首先检查 32 位注册表视图 [Wow6432Node](https://zh.wikipedia.org/wiki/WoW64#Registry_and_file_system) 的键,然后是native注册表视图。请使用适合你的应用程序的那一个。
>
> **对 于Firefox 63 和更早的版本** 这个键不应该在 [Wow6432Node](https://zh.wikipedia.org/wiki/WoW64#Registry_and_file_system) 下创建,即使应用程序是 32 位的。以前版本的浏览器总是在注册表的 "native" 视图下寻找该键,而不是在 32 位模拟视图下寻找。为了确保在 "native" 视图中创建键,你可以在 `RegCreateKeyEx` 中传递 `KEY_WOW64_64KEY``KEY_WOW64_32KEY` 标志。参见[访问备用注册表视图](https://docs.microsoft.com/windows/win32/winprog64/accessing-an-alternate-registry-view)
> **对于 Firefox 63 和更早的版本**这个键不应该在 [Wow6432Node](https://zh.wikipedia.org/wiki/WoW64#Registry_and_file_system) 下创建,即使应用程序是 32 位的。以前版本的浏览器总是在注册表的native视图下寻找该键,而不是在 32 位模拟视图下寻找。为了确保在native视图中创建键,你可以在 `RegCreateKeyEx` 中传递 `KEY_WOW64_64KEY``KEY_WOW64_32KEY` 标志。参见[访问备用注册表视图](https://docs.microsoft.com/windows/win32/winprog64/accessing-an-alternate-registry-view)
如果想要用户级别的可见,使用下面的路径创建注册表:
如果想要用户级别可见,使用下面的路径创建注册表:

```
HKEY_CURRENT_USER\SOFTWARE\Mozilla\NativeMessagingHosts\<name>
Expand All @@ -371,7 +364,7 @@ HKEY_CURRENT_USER\SOFTWARE\Mozilla\ManagedStorage\<name>
HKEY_CURRENT_USER\SOFTWARE\Mozilla\PKCS11Modules\<name>
```

注册表应该有单个默认值,值里存放“到清单文件的路径”
注册表应该有单个默认值,为到清单文件的路径

### macOS

Expand All @@ -389,7 +382,7 @@ HKEY_CURRENT_USER\SOFTWARE\Mozilla\PKCS11Modules\<name>
/Library/Application Support/Mozilla/PKCS11Modules/<name>.json
```

如果想要用户级别的可见,将清单文件存放在:
如果想要用户级别可见,将清单文件存放在:

```
~/Library/Application Support/Mozilla/NativeMessagingHosts/<name>.json
Expand Down Expand Up @@ -422,18 +415,18 @@ HKEY_CURRENT_USER\SOFTWARE\Mozilla\PKCS11Modules\<name>
或者:

```
/usr/lib64/mozilla/native-messaging-hosts/<name>.json
/usr/lib64/mozilla/native-messaging-hosts/<name>.json
```

```
/usr/lib64/mozilla/managed-storage/<name>.json
/usr/lib64/mozilla/managed-storage/<name>.json
```

```
/usr/lib64/mozilla/pkcs11-modules/<name>.json
/usr/lib64/mozilla/pkcs11-modules/<name>.json
```

如果想要用户级别的可见,将清单文件存放在:
如果想要用户级别可见,将清单文件存放在:

```
~/.mozilla/native-messaging-hosts/<name>.json
Expand Down
Binary file not shown.

0 comments on commit 08a2094

Please sign in to comment.