使用 WebHID

人机接口设备 (HID) 从人类接收输入或提供输出。它还指 HID 协议,这是主机和设备之间的双向通信标准,旨在简化安装过程。

本页面介绍了特定于扩展程序的 API 的各个方面。如需详细了解 WebHID API,请参阅 MDN。

您可以在我们的示例代码库中找到适用于 WebHID 的示例应用

扩展程序中的可用性

Chrome 117 或更高版本。

权限

不需要清单文件权限;但是 WebHID 会触发浏览器的用户权限流程。

清单

此 API 不需要清单键。

辅助性上下文

此 API 可用于几乎任何情境。WebHID.requestDevice() 方法不能在扩展 Service Worker 中使用。有关详情,请参见下文。

在扩展 Service Worker 中使用此 API 时,设备连接会话会使 Service Worker 保持活跃状态。

Chrome 扩展程序差异

虽然 WebHID 可供扩展程序 Service Worker 使用,但无法在扩展程序 Service Worker 中调用 WebHID.requestDevice()(会返回使用 HIDDevice 实例解析的 promise)。要解决此问题,请从扩展程序 Service Worker 以外的扩展页面调用 requestDevice(),然后向 Extensions Service Worker 发送消息。

以下代码遵循典型模式,在需要用户手势的权限流程中调用 requestDevice()。获得设备后,它会向 Service Worker 发送消息,后者随后可以使用 getDevices() 检索设备。

popup.js:

myButton.addEventListener("click", async () => {
  await navigator.hid.requestDevice({
    filters: [{ vendorId: 0x1234, productId: 0x5678 }],
  });
  chrome.runtime.sendMessage("newDevice");
});

service-worker.js

chrome.runtime.onMessage.addListener(async (message) => {
  if (message === "newDevice") {
    const devices = await navigator.hid.getDevices();
    for (const device of devices) {
      // open device connection.
      await device.open();
    }
  }
});