HID:requestDevice() 方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

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

HID 接口的 requestDevice() 方法用于请求访问 HID 设备。

用户代理将呈现一个权限对话框,其中包含一个已连接设备列表,并要求用户选择其中一个设备并授予访问权限。

语法

js
requestDevice(options)

参数

options

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

vendorId 可选

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

productId 可选

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

usagePage 可选

一个整数,表示所请求设备 HID 用途的 usage page 组件。顶层集合的用途用于识别设备类型。

可以在 HID Usage Tables 文档中找到标准的 HID 用途值。

usage 可选

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

注意: 设备过滤器用于缩小显示给用户的设备列表。如果没有提供过滤器,则显示所有已连接的设备。当包含一个或多个过滤器时,如果任何过滤器匹配,则包含该设备。要匹配一个过滤器,必须满足该过滤器包含的所有规则。

返回值

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

异常

SecurityError DOMException

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

安全

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

示例

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

以下示例请求一个 vendor ID 为 0xABCD、product ID 为 0x1234、usage page 为 0x0C、usage 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

浏览器兼容性