使用 WebHID

人机接口设备 (HID) 可从人接受输入或向人提供输出。它还指 HID 协议,该协议是一种用于在主机和设备之间实现双向通信的标准,旨在简化安装过程。

本页介绍了扩展程序专有的 API 方面。如需详细了解 WebHID API,请参阅 MDN。

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

在扩展程序中的可用性

Chrome 117 或更高版本。

权限

无需清单文件权限;不过,WebHID 会触发浏览器的用户权限流程。

清单

此 API 不需要清单密钥。

支持的上下文

此 API 几乎可在任何上下文中使用。WebHID.requestDevice() 方法无法在扩展程序服务工作器中使用。有关详情,请参见下文。

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

Chrome 扩展程序差异

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

以下代码遵循典型模式,在需要用户手势的权限流程中调用 requestDevice()。获取设备后,它会向服务工件发送消息,然后服务工件可以使用 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();
    }
  }
});