跳转至

设备访问

与基于 Chromium 的浏览器类似,Electron 通过 Web API 提供对设备硬件的访问。 在大多数情况下,这些 API 的工作方式与浏览器中相同,但存在一些需要考虑的差异。 Electron 与浏览器之间的主要差异在于请求设备访问时发生的情况。 在浏览器中,用户会看到一个弹出窗口,可以在其中授予对单个设备的访问权限。 在 Electron 中,提供了可由开发者使用的 API,用于自动选择设备,或通过开发者创建的界面提示用户选择设备。

Web Bluetooth API

Web Bluetooth API 可用于与蓝牙设备通信。 要在 Electron 中使用此 API,开发者需要处理与设备请求关联的 webContents 上的 select-bluetooth-device 事件。

此外,ses.setBluetoothPairingHandler(handler) 可用于在 Windows 或 Linux 上处理与蓝牙设备的配对,当需要 PIN 码等额外验证时。

示例

此示例演示了一个 Electron 应用程序,当点击 Test Bluetooth 按钮时,自动选择第一个可用的蓝牙设备。

```fiddle docs/fiddles/features/web-bluetooth

## WebHID API {#webhid-api}

[WebHID API](https://web.dev/hid/) 可用于访问 HID 设备,例如键盘和游戏手柄。
Electron 提供了多个用于处理 WebHID API 的 API:

* [Session 上的 `select-hid-device` 事件](../api/session.md#event-select-hid-device)
  可用于在调用 `navigator.hid.requestDevice` 时选择 HID 设备。
  此外,Session 上的 [`hid-device-added`](../api/session.md#event-hid-device-added)
  和 [`hid-device-removed`](../api/session.md#event-hid-device-removed) 事件
  可用于在处理 `select-hid-device` 事件时处理设备插入或拔出。
  **注意:** 这些事件仅在 `select-hid-device` 的回调被调用之前触发。
  它们不打算用作通用的 HID 设备监听器。
* [`ses.setDevicePermissionHandler(handler)`](../api/session.md#sessetdevicepermissionhandlerhandler)
  可用于在通过 `navigator.hid.requestDevice` 请求设备权限之前,为设备提供默认权限。
  此外,Electron 的默认行为是在相应 WebContents 的生命周期内存储已授予的设备权限。
  如果需要更长时间的存储,开发者可以存储已授予的设备权限(例如在处理
  `select-hid-device` 事件时),然后使用 `setDevicePermissionHandler` 从该存储中读取。
* [`ses.setPermissionCheckHandler(handler)`](../api/session.md#sessetpermissioncheckhandlerhandler)
  可用于禁用特定源的 HID 访问。

### 阻止列表 {#blocklist}

默认情况下,Electron 使用与 Chromium 相同的 [阻止列表](https://wicg.github.io/webhid/#blocklist)。
如果希望覆盖此行为,可以通过设置 `disable-hid-blocklist` 标志来实现:

```js
app.commandLine.appendSwitch('disable-hid-blocklist')

示例

此示例演示了一个 Electron 应用程序,当点击 Test WebHID 按钮时,通过 ses.setDevicePermissionHandler(handler) 以及通过 Session 上的 select-hid-device 事件 自动选择 HID 设备。

```fiddle docs/fiddles/features/web-hid

## Web Serial API {#web-serial-api}

[Web Serial API](https://web.dev/serial/) 可用于访问通过串口、USB 或蓝牙连接的串行设备。
要在 Electron 中使用此 API,开发者需要处理与串行端口请求关联的
[Session 上的 `select-serial-port` 事件](../api/session.md#event-select-serial-port)。

还有多个用于处理 Web Serial API 的附加 API:

* Session 上的 [`serial-port-added`](../api/session.md#event-serial-port-added)
  和 [`serial-port-removed`](../api/session.md#event-serial-port-removed) 事件
  可用于在处理 `select-serial-port` 事件时处理设备插入或拔出。
  **注意:** 这些事件仅在 `select-serial-port` 的回调被调用之前触发。
  它们不打算用作通用的串行端口监听器。
* [`ses.setDevicePermissionHandler(handler)`](../api/session.md#sessetdevicepermissionhandlerhandler)
  可用于在通过 `navigator.serial.requestPort` 请求设备权限之前,为设备提供默认权限。
  此外,Electron 的默认行为是在相应 WebContents 的生命周期内存储已授予的设备权限。
  如果需要更长时间的存储,开发者可以存储已授予的设备权限(例如在处理
  `select-serial-port` 事件时),然后使用 `setDevicePermissionHandler` 从该存储中读取。
* [`ses.setPermissionCheckHandler(handler)`](../api/session.md#sessetpermissioncheckhandlerhandler)
  可用于禁用特定源的串行访问。

### 阻止列表 {#blocklist}

默认情况下,Electron 使用与 Chromium 相同的 [阻止列表](https://wicg.github.io/serial/#blocklist)。
如果希望覆盖此行为,可以通过设置 `disable-serial-blocklist` 标志来实现:

```js
app.commandLine.appendSwitch('disable-serial-blocklist')

示例

此示例演示了一个 Electron 应用程序,当点击 Test Web Serial 按钮时,通过 ses.setDevicePermissionHandler(handler) 自动选择串行设备, 并演示通过 Session 上的 select-serial-port 事件 选择第一个可用的 Arduino Uno 串行设备(如果已连接)。

```fiddle docs/fiddles/features/web-serial

## WebUSB API {#webusb-api}

[WebUSB API](https://web.dev/usb/) 可用于访问 USB 设备。
Electron 提供了多个用于配合 WebUSB API 使用的 API:

* [Session 上的 `select-usb-device` 事件](../api/session.md#event-select-usb-device)
  可用于在调用
  `navigator.usb.requestDevice` 时选择 USB 设备。 此外,Session 上的 [`usb-device-added`](../api/session.md#event-usb-device-added)
  和 [`usb-device-removed`](../api/session.md#event-usb-device-removed) 事件
  可用于在处理 `select-usb-device` 事件时处理设备插入或拔出。
  **注意:** 这两个事件仅在调用 `select-usb-device` 的回调之前触发。 它们不打算用作通用的 USB 设备监听器。
* [Session 上的 `usb-device-revoked` 事件](../api/session.md#event-usb-device-revoked) 可用于
  在 USB 设备上调用 [device.forget()](https://developer.chrome.com/articles/usb/#revoke-access)
  时作出响应。
* [`ses.setDevicePermissionHandler(handler)`](../api/session.md#sessetdevicepermissionhandlerhandler)
  可用于在通过 `navigator.usb.requestDevice` 请求设备权限之前,为设备提供默认权限。 此外,
  Electron 的默认行为是在相应 WebContents 的生命周期内存储已授予的设备权限。 如果需要长期存储,
  开发者可以存储已授予的设备权限(例如在处理
  `select-usb-device` 事件时),然后使用
  `setDevicePermissionHandler` 从该存储中读取。
* [`ses.setPermissionCheckHandler(handler)`](../api/session.md#sessetpermissioncheckhandlerhandler)
  可用于禁用特定源对 USB 的访问。
* [`ses.setUSBProtectedClassesHandler](../api/session.md#sessetusbprotectedclasseshandlerhandler)
  可用于允许使用默认不可用的 [受保护的 USB 类](https://wicg.github.io/webusb/#usbinterface-interface)。

### 阻止列表 {#blocklist}

默认情况下,Electron 采用 Chromium 使用的相同 [阻止列表](https://wicg.github.io/webusb/#blocklist)。 如果你希望覆盖此行为,可以通过
设置 `disable-usb-blocklist` 标志来实现:

```js
app.commandLine.appendSwitch('disable-usb-blocklist')

示例

此示例演示了一个 Electron 应用程序,当点击 Test WebUSB 按钮时,如果 USB 设备已连接,它会通过 ses.setDevicePermissionHandler(handler) 和 Session 上的 select-usb-device 事件 自动选择 USB 设备。

```fiddle docs/fiddles/features/web-usb

```

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 el/electron