Skip to content

Commit

Permalink
[zh-cn]: sync translation for Permissions API (mdn#23487)
Browse files Browse the repository at this point in the history
Co-authored-by: Jason Ren <[email protected]>
  • Loading branch information
2 people authored and sora32127 committed Oct 6, 2024
1 parent 022a6f5 commit 9dd4c25
Show file tree
Hide file tree
Showing 6 changed files with 86 additions and 96 deletions.
6 changes: 1 addition & 5 deletions files/zh-cn/web/api/permissions/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: Permissions
slug: Web/API/Permissions
l10n:
sourceCommit: ee253ac58d71b2ed336b705ab97dbe93122b3e04
sourceCommit: 805d398f95c9d1ad8769e65d56bbfe2a31205021
---

{{APIRef("Permissions API")}}{{AvailableInWorkers}}
Expand All @@ -13,10 +13,6 @@ l10n:

- {{domxref("Permissions.query","Permissions.query()")}}
- : 返回给定 API 的用户权限状态。
- {{domxref("Permissions.request","Permissions.request()")}} {{Experimental_Inline}}
- : 请求使用给定 API 的权限。目前任何浏览器都不支持此功能。
- {{domxref("Permissions.requestAll","Permissions.requestAll()")}} {{Experimental_Inline}} {{Non-standard_Inline}}
- : 请求使用一组给定 API 的权限。目前任何浏览器都不支持此功能。
- {{domxref("Permissions.revoke","Permissions.revoke()")}} {{Deprecated_Inline}}
- : 撤消当前在给定 API 上设置的权限。

Expand Down
27 changes: 16 additions & 11 deletions files/zh-cn/web/api/permissions/query/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,17 @@
title: Permissions:query() 方法
slug: Web/API/Permissions/query
l10n:
sourceCommit: ee253ac58d71b2ed336b705ab97dbe93122b3e04
sourceCommit: 3fde60e07c74ad4954a0c77fdd80958c7d07f088
---

{{APIRef("Permissions API")}}{{AvailableInWorkers}}

{{domxref("Permissions")}} 接口的 **`query()`** 方法会返回全局作用域中用户权限的状态。

用户权限名称在每个功能的各自规范中定义。不同浏览器版本支持的权限在 [`Permissions` 接口的兼容性数据](/zh-CN/docs/Web/API/Permissions#浏览器兼容性)中列出(另请参阅 [Firefox 值](https://searchfox.org/mozilla-central/source/dom/webidl/Permissions.webidl#10)[Chromium 值](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/third_party/blink/renderer/modules/permissions/permission_descriptor.idl)[WebKit 值](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/Modules/permissions/PermissionName.idl)的相关源代码)。

每个权限所控制的 API 在[权限 API](/zh-CN/docs/Web/API/Permissions_API) 概述主题中的[权限相关的 API](/zh-CN/docs/Web/API/Permissions_API#权限相关的_api) 中列出。

## 语法

```js-nolint
Expand All @@ -19,23 +23,24 @@ query(permissionDescriptor)

- `permissionDescriptor`

- : 一个为 `query` 操作设置选项的对象,由一个以逗号分隔的键——值对列表组成。可用的选项有
- : 设置 `query` 操作选项的对象。此描述符的可用选项取决于权限类型。所有权限都有一个名称

- `name`
- : 要查询权限的 API 名称。每个浏览器支持不同的值集。Firefox 的值在[这里](https://searchfox.org/mozilla-central/source/dom/webidl/Permissions.webidl#10),Chromium 的值在[这里](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/third_party/blink/renderer/modules/permissions/permission_descriptor.idl),WebKit 的值在[这里](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/Modules/permissions/PermissionName.idl)
- `userVisibleOnly`
- : (仅推送,不被 Firefox 所支持——请参阅下面的“浏览器兼容性”部分)表示是否希望为每条消息显示通知或发送静默推送通知。默认为 `false`
- `sysex`(仅限 MIDI)
- : 表示是否需要接收系统专有信息。默认为 `false`
- : 包含要查询其权限的 API 名称的字符串,例如 `camera``bluetooth``camera``geolocation`(有关更完整的列表,请参阅 [`Permissions`](/zh-CN/docs/Web/API/Permissions#浏览器兼容性))。如果浏览器不支持权限名称,则返回的 {{jsxref("Promise")}} 将使用 {{jsxref("TypeError")}} 拒绝。

对于 `push` 权限,你还可以指定:

- `userVisibleOnly` {{optional_inline}}
- : (仅推送,Firefox 不支持——请参阅下面的浏览器支持部分)表示你是否要为每条消息显示通知或能够发送静默推送通知。默认值为 `false`

> [!NOTE]
> 从 Firefox 44 开始,[Notifications](/zh-CN/docs/Web/API/Notifications_API)[Push](/zh-CN/docs/Web/API/Push_API) 的权限已经合并。如果权限已授予(例如由用户在相关权限对话框中授予),`navigator.permissions.query()` 将为 `notifications``push` 返回 `true`
对于 `midi` 权限,你还可以指定:

> **备注:** `persistent-storage`权限允许根据 [Storage API](https://storage.spec.whatwg.org/) 使用持久盒(即[持久存储](https://storage.spec.whatwg.org/#persistence))来进行存储。
- `sysex` {{optional_inline}}
- : 指示是否需要接收系统独有消息。默认值为 `false`

### 返回值

一个会兑现为 {{domxref("PermissionStatus")}} 对象的 {{jsxref("Promise")}}。
一个兑现为 {{domxref("PermissionStatus")}} 对象的 {{jsxref("Promise")}}。

### 异常

Expand Down
31 changes: 18 additions & 13 deletions files/zh-cn/web/api/permissions/revoke/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,43 @@
title: Permissions:revoke() 方法
slug: Web/API/Permissions/revoke
l10n:
sourceCommit: afdbe078d7c0357430ff360538edafba3af5496d
sourceCommit: 3fde60e07c74ad4954a0c77fdd80958c7d07f088
---

{{APIRef("Permissions API")}}{{AvailableInWorkers}}{{deprecated_header}}

{{domxref("Permissions")}} 接口的 **`revoke()`** 方法可将当前设置的权限还原为默认状态,即通常的 `prompt` 状态。该方法在全局 {{domxref("Permissions")}} 对象 {{domxref("navigator.permissions")}} 上调用。

此方法已从主要权限 API 规范中删除,因为其用例不明确。权限由浏览器管理,当前权限模型不涉及网站开发人员能够强制请求或撤销权限。浏览器已以首选项形式提供此 API,但它不太可能达到标准轨道。有关更多上下文,请参阅[删除 `permissions.revoke()` 的原始讨论](https://github.com/w3c/permissions/issues/46)

## 语法

```js-nolint
revoke(descriptor)
revoke(permissionDescriptor)
```

### 参数

- `descriptor`
- : 一个基于 `PermissionDescriptor` 字典的对象,用于设置由逗号分隔的键——值对列表组成的操作选项。可用的选项有:
- `permissionDescriptor`

- : 设置 `revoke` 操作选项的对象。此描述符的可用选项取决于权限类型。所有权限都有一个名称:

- `name`
- : 要查询其权限的 API 的名称。每个浏览器支持不同的值集。你可以查阅 [Firefox 的值](https://searchfox.org/mozilla-central/source/dom/webidl/Permissions.webidl#10)[Chromium 的值](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/third_party/blink/renderer/modules/permissions/permission_descriptor.idl)[WebKit 的值](https://github.com/WebKit/WebKit/blob/main/Source/WebCore/Modules/permissions/PermissionName.idl)
- `userVisibleOnly`
- : (仅限推送,Firefox 不支持——请参阅下面的[浏览器兼容性](#浏览器兼容性)部分)表示是否要为每条信息显示通知,还是能够发送静默推送通知。默认为 `false`
- `sysex`(仅限 MIDI)
- : 表示是否需要接收系统专用消息。默认为 `false`
- : 包含要查询其权限的 API 名称的字符串。如果浏览器不支持该权限名称,则返回的 {{jsxref("Promise")}} 将使用 {{jsxref("TypeError")}} 拒绝。

对于 `push` 权限,你还可以指定:

- `userVisibleOnly` {{optional_inline}}
- : (仅推送,Firefox 不支持——请参阅下面的浏览器支持部分)表示你是否要为每条消息显示通知或能够发送静默推送通知。默认值为 `false`

> [!NOTE]
> 从 Firefox 44 开始,[Notifications](/zh-CN/docs/Web/API/Notifications_API)[Push](/zh-CN/docs/Web/API/Push_API) 的权限已经合并。如果权限已授予(例如由用户在相关权限对话框中授予),`navigator.permissions.query()` 将为 `notifications``push` 返回 `true`
对于 `midi` 权限,你还可以指定:

> **备注:** `persistent-storage` 权限允许使用持久盒(即[持久存储](https://storage.spec.whatwg.org/#persistence))进行存储,如 [Storage API](https://storage.spec.whatwg.org/) 所述。
- `sysex` {{optional_inline}}
- : 指示是否需要接收系统独有消息。默认值为 `false`

### 返回值

一个 {{jsxref("Promise")}},其会在调用兑现处理器时传入指示请求的结果的 {{domxref("PermissionStatus")}} 对象
使用 {{domxref("PermissionStatus")}} 对象调用其兑现处理器以指示请求的结果的 {{jsxref("Promise")}}。

### 异常

Expand Down
48 changes: 34 additions & 14 deletions files/zh-cn/web/api/permissions_api/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,48 @@
title: 权限 API
slug: Web/API/Permissions_API
l10n:
sourceCommit: ee253ac58d71b2ed336b705ab97dbe93122b3e04
sourceCommit: 3fde60e07c74ad4954a0c77fdd80958c7d07f088
---

{{DefaultAPISidebar("Permissions API")}}{{AvailableInWorkers}}

**权限 API**(Permissions API)提供一致的编程方式来查询归因于当前上下文的 API 权限的状态。例如,权限 API 可用于确定是否已授予或拒绝访问特定 API 的权限,或者是否需要特定的用户权限。

请注意,此 API 的权限有效地聚合了上下文的所有安全限制,包括在安全上下文中使用 API 的任何要求,[Permissions-Policy](/zh-CN/docs/Web/HTTP/Headers/Permissions-Policy) 应用于文档的限制以及用户提示。因此,例如,如果 API 受到权限策略的限制,则返回的权限将被“拒绝”,并且不会提示用户访问。
**权限 API** 提供了一种一致的编程方式来查询当前上下文(例如网页或 worker)的 API 权限状态。例如,它可用于确定访问特定功能或 API 的权限是否已被授予、被拒绝或需要特定用户权限。

## 概念和用法

历史上不同的 API 对自己的权限的处理方式不一致——例如,[Notifications API](/zh-CN/docs/Web/API/Notifications_API) 提供了自己的方法来请求权限和检查权限状态,而 [Geolocation API](/zh-CN/docs/Web/API/Geolocation) 没有。权限 API 提供的工具允许开发者在使用权限时实现一致且更好的用户体验。
历史上不同的 API 对自己的权限的处理方式不一致——例如,[Notifications API](/zh-CN/docs/Web/API/Notifications_API) 提供了自己的方法来请求权限和检查权限状态,而 [Geolocation API](/zh-CN/docs/Web/API/Geolocation) 没有。权限 API 提供的工具允许开发者在使用权限时实现一致的用户体验。

此 API 的权限有效地汇总了上下文的所有安全限制,包括在安全上下文中使用 API 的任何要求、应用于文档的 [Permissions-Policy](/zh-CN/docs/Web/HTTP/Headers/Permissions-Policy) 限制、用户交互要求和用户提示。因此,例如,如果 API 受到权限策略的限制,则返回的权限将会为 `denied`,并且不会提示用户访问。

`permissions` 属性已在 {{domxref("Navigator")}} 对象上可用,在标准浏览上下文和 worker 上下文中均可用({{domxref("WorkerNavigator")}}——因此可在 worker 内进行权限检查),并返回 {{domxref("Permissions")}} 对象,该对象提供对权限 API 功能的访问。

一旦你有了这个对象,你就可以使用 {{domxref("Permissions.query()")}} 方法返回一个通过 {{domxref("PermissionStatus")}} 兑现特定 API 的 promise。

### 请求权限

如果权限状态为 `prompt`,则用户必须确认提示以授予对该特性的访问权限。

触发此提示的机制将取决于特定 API——它未定义为权限 API 的一部分。通常,触发器是调用方法来访问或打开该特性的代码,或者注册随后将访问该特性的通知的代码。

请注意,并非所有功能都需要提示。权限可能由 `Permission Policy` 授予,由{{glossary("transient activation", "瞬态激活")}}隐式授予,或通过其他机制授予。

### 撤销权限

`permissions` 属性已在标准浏览上下文和 worker 上下文({{domxref("WorkerNavigator")}} ——因此可以在 worker 内部进行权限检查)中的 {{domxref("Navigator")}} 对象上可用,并返回一个提供对权限 API 功能的访问的 {{domxref("Permissions")}} 对象
权限撤销不由 API 管理。更具体地说,{{domxref("Permissions.revoke()")}} 方法曾被提出,但此后已从实施该方法的浏览器中删除

获得此对象后,你可以使用 {{domxref("Permissions.query()")}} 方法返回一个 promise,该 promise 为特定的 API 解析 {{domxref("PermissionStatus")}} 对象。请注意,如果状态为 `prompt`,则用户必须在访问该功能之前确认提示,并且启动此提示的机制将取决于特定的 API——它并未定义为权限 API 的一部分。
用户可以使用浏览器设置手动删除特定网站的权限:

- **Firefox**_菜单 > 设置 > 隐私和安全 > 权限_(然后选择感兴趣的权限的**设置**按钮)。
- **Chrome**_菜单 > 设置 > 显示高级设置_。在*隐私*部分中,单击*内容设置*。在出现的对话框中,找到*位置*部分并选择*当网站尝试... 时询问*。最后,单击*管理例外*并删除你授予你感兴趣的网站的权限。

### 权限相关的 API

并非所有 API 的权限状态都可以通过权限 API 查询。权限相关的 API 的非详尽列表包括:

- [Background Synchronization API](/zh-CN/docs/Web/API/Background_Synchronization_API)`background-sync`(应当总是被授予)
- [Geolocation API](/zh-CN/docs/Web/API/Geolocation_API)`geolocation`
- [Clipboard API](/zh-CN/docs/Web/API/Clipboard_API#安全考虑)`clipboard-read``clipboard-write`
- [Compute Pressure API](/zh-CN/docs/Web/API/Compute_Pressure_API)`compute-pressure`
- [Geolocation API](/zh-CN/docs/Web/API/Geolocation_API#security_considerations)`geolocation`
- [Local Font Access API](/zh-CN/docs/Web/API/Local_Font_Access_API)`local-fonts`
- [Media Capture and Streams API](/zh-CN/docs/Web/API/Media_Capture_and_Streams_API)`microphone``camera`
- [Notifications API](/zh-CN/docs/Web/API/Notifications_API)`notifications`
Expand All @@ -34,15 +53,10 @@ l10n:
- [Sensor APIs](/zh-CN/docs/Web/API/Sensor_APIs)`accelerometer``gyroscope``magnetometer``ambient-light-sensor`
- [Storage Access API](/zh-CN/docs/Web/API/Storage_Access_API)`storage-access``top-level-storage-access`
- [Storage API](/zh-CN/docs/Web/API/Storage_API)`persistent-storage`
- [Web Bluetooth API](/zh-CN/docs/Web/API/Web_Bluetooth_API)`bluetooth`
- [Web MIDI API](/zh-CN/docs/Web/API/Web_MIDI_API)`midi`
- [Window Management API](/zh-CN/docs/Web/API/Window_Management_API)`window-management`

## 示例

我们创建了一个名为 Location Finder 的简单示例。你可以[实时运行示例](https://chrisdavidmills.github.io/location-finder-permissions-api/),或[在 GitHub 上查看源代码](https://github.com/chrisdavidmills/location-finder-permissions-api/tree/gh-pages)

有关其工作原理的更多信息,请阅读我们的文章[使用权限 API](/zh-CN/docs/Web/API/Permissions_API/Using_the_Permissions_API)

## 接口

- {{domxref("Permissions")}}
Expand All @@ -55,6 +69,12 @@ l10n:
- {{domxref("Navigator.permissions")}} 和 {{domxref("WorkerNavigator.permissions")}} {{ReadOnlyInline}}
- : 分别用于访问主上下文和 worker 上下文的 {{domxref("Permissions")}} 对象。

## 示例

我们创建了一个名为 Location Finder 的简单示例。你可以[实时运行示例](https://chrisdavidmills.github.io/location-finder-permissions-api/)[在 GitHub 上查看源代码](https://github.com/chrisdavidmills/location-finder-permissions-api/tree/gh-pages),或者在我们的文章[使用权限 API](/zh-CN/docs/Web/API/Permissions_API/Using_the_Permissions_API)中阅读有关其工作原理的更多信息。

[`Permissions.query()` 示例](/zh-CN/docs/Web/API/Permissions/query#测试对不同权限的支持)也展示了在当前浏览器上测试大多数权限并记录结果的代码。

## 规范

{{Specifications}}
Expand Down
Loading

0 comments on commit 9dd4c25

Please sign in to comment.