HIDDevice

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

安全上下文: 此项功能仅在一些支持的浏览器安全上下文(HTTPS)中可用。

实验性: 这是一项实验性技术
在将其用于生产之前,请仔细检查浏览器兼容性表格

备注: 此特性在 Web Worker(不包括共享 Web Worker)中可用。

WebHID APIHIDDevice 接口表示人机接口(HID)设备。它提供了用于访问设备信息的属性,打开和关闭的方法,以及发送和接收报告的功能。

EventTarget HIDDevice

实例属性

此接口也从其父接口 EventTarget 继承属性。

HIDDevice.opened 只读 实验性

返回一个 boolean 值,如果设备已打开连接,则为 true

HIDDevice.vendorId 只读 实验性

返回 HID 设备的供应商 ID。

HIDDevice.productId 只读 实验性

返回 HID 设备的产品 ID。

HIDDevice.productName 只读 实验性

返回一个包含 HID 设备产品名称的字符串。

HIDDevice.collections 只读 实验性

返回 HID 设备的报告格式数组。

事件

inputreport 实验性

当设备发送报告时触发。

实例方法

此接口也从其父接口 EventTarget 继承方法。

HIDDevice.open() 实验性

打开此 HID 设备的连接,并返回一个会在连接成功时兑现的 Promise

HIDDevice.close() 实验性

关闭此 HID 设备的连接,并返回一个会在连接关闭时兑现的 Promise

HIDDevice.forget() 实验性

关闭此 HID 设备的连接并重置访问权限,然后返回一个会在权限被重置时兑现的 Promise

HIDDevice.sendReport() 实验性

向此 HID 设备发送输出报告,并返回一个会在报告发送成功时兑现的 Promise

HIDDevice.sendFeatureReport() 实验性

向此 HID 设备发送一个特征报告,并返回一个会在报告发送成功时兑现的 Promise

HIDDevice.receiveFeatureReport() 实验性

从 HID 设备接收一个特征报告,以 Promise 的形式兑现为 DataView。从而允许以类型化的方式访问此消息的内容。

示例

以下示例演示如何监听 inputreport 事件,该事件允许应用程序检测到 Joy-Con 右手柄设备上的哪个按钮被按下。

js
device.addEventListener("inputreport", (event) => {
  const { data, device, reportId } = event;

  // 处理 Joy-Con 右手柄设备和特定的报告 ID
  if (device.productId !== 0x2007 && reportId !== 0x3f) return;

  const value = data.getUint8(0);
  if (value === 0) return;

  const someButtons = { 1: "A", 2: "X", 4: "B", 8: "Y" };
  console.log(`用户按下了 ${someButtons[value]}。`);
});

在以下示例中,用 sendFeatureReport 使设备闪烁。

js
const reportId = 1;
for (let i = 0; i < 10; i++) {
  // 关闭
  await device.sendFeatureReport(reportId, Uint32Array.from([0, 0]));
  await new Promise((resolve) => setTimeout(resolve, 100));
  // 打开
  await device.sendFeatureReport(reportId, Uint32Array.from([512, 0]));
  await new Promise((resolve) => setTimeout(resolve, 100));
}

你可以在文章连接到不常见的 HID 设备中看到更多示例和实时演示。

规范

Specification
WebHID API
# dom-hiddevice

浏览器兼容性

BCD tables only load in the browser