HID:requestDevice() 方法

有限可用性

此功能不是基线,因为它在某些最广泛使用的浏览器中无法正常工作。

安全上下文:此功能仅在安全上下文(HTTPS)中可用,在某些或所有支持的浏览器中可用。

实验性:这是一个实验性技术
在生产环境中使用此功能之前,请仔细查看浏览器兼容性表

requestDevice() 方法是 HID 接口的一种方法,它请求访问 HID 设备。

用户代理将显示一个权限对话框,其中包含连接设备的列表,并要求用户选择并授予对其中一个设备的权限。

语法

js
requestDevice(options)

参数

options

一个对象,包含一个过滤器对象数组,用于与可能的设备配对。每个过滤器对象都可以具有以下属性

vendorId 可选

一个整数,表示请求的 HID 设备的 vendorId

productId 可选

一个整数,表示请求的 HID 设备的 productId。

usagePage 可选

一个整数,表示请求的设备的 HID 用途的用途页组件。顶级集合的用途用于标识设备类型。

标准 HID 用途值可以在HID 用途表文档中找到

usage 可选

一个整数,表示请求的设备的 HID 用途的用途 ID 组件。

注意:设备过滤器用于缩小向用户显示的设备列表。如果不存在过滤器,则将显示所有连接的设备。当包含一个或多个过滤器时,如果任何过滤器匹配,则设备将被包含在内。要匹配过滤器,必须匹配该过滤器中包含的所有规则。

返回值

一个Promise,它解析为一个连接的 HIDDevice 对象数组,这些对象与传入的过滤器匹配。

异常

SecurityError DOMException

如果页面不允许访问 HID 功能,则抛出该异常。

安全性

需要短暂的用户激活。用户必须与页面或 UI 元素进行交互,才能使此功能正常工作。

示例

使用所有四个过滤器规则匹配设备

在以下示例中,请求一个 vendor ID 为 0xABCD、product ID 为 0x1234、用途页为 0x0C、用途 ID 为 0x01 的 HID 设备。只有匹配所有这些规则的设备才会显示。

js
let requestButton = document.getElementById("request-hid-device");
requestButton.addEventListener("click", async () => {
  let device;
  try {
    const devices = await navigator.hid.requestDevice({
      filters: [
        {
          vendorId: 0xabcd,
          productId: 0x1234,
          usagePage: 0x0c,
          usage: 0x01,
        },
      ],
    });
    device = devices[0];
  } catch (error) {
    console.log("An error occurred.");
  }

  if (!device) {
    console.log("No device was selected.");
  } else {
    console.log(`HID: ${device.productName}`);
  }
});

包含两个过滤器的示例

下一个示例包含两个过滤器。如果设备匹配其中任何一个过滤器,则将显示设备。

js
// Filter on devices with the Nintendo Switch Joy-Con USB Vendor/Product IDs.
const filters = [
  {
    vendorId: 0x057e, // Nintendo Co., Ltd
    productId: 0x2006, // Joy-Con Left
  },
  {
    vendorId: 0x057e, // Nintendo Co., Ltd
    productId: 0x2007, // Joy-Con Right
  },
];

// Prompt user to select a Joy-Con device.
const [device] = await navigator.hid.requestDevice({ filters });

规范

规范
WebHID API
# dom-hid-requestdevice

浏览器兼容性

BCD 表仅在浏览器中加载