USB: requestDevice() 方法

可用性有限

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

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

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

注意:此功能在 Web Workers 中可用。

requestDevice()USB 接口的一个方法,如果找到指定的设备,它会返回一个 Promise,该 Promise 会解析为 USBDevice 实例。调用此函数会触发用户代理的配对流程。

语法

js
requestDevice(options)

参数

options

一个用于设置选择合适设备选项的对象。可用选项包括:

filters

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

  • vendorId
  • productId
  • classCode
  • subclassCode
  • protocolCode
  • serialNumber

返回值

一个 Promise,它会解析为 USBDevice 实例。

安全

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

示例

下面的示例查找两种 USB 设备之一。请注意,指定了两个产品 ID。它们都被传递给了 requestDevice()。这会触发用户代理流程,提示用户选择一个设备进行配对。只有选定的设备才会被传递给 then()

过滤器的数量并不决定用户代理显示的设备数量。例如,如果只找到一个产品 ID 为 0xa800 的 USB 设备,那么用户代理只会列出这一个设备。另一方面,如果用户代理找到第一个列出的设备有两个,第二个设备有一个,那么所有三个设备都会被列出。

js
const filters = [
  { vendorId: 0x1209, productId: 0xa800 },
  { vendorId: 0x1209, productId: 0xa850 },
];
navigator.usb
  .requestDevice({ filters })
  .then((usbDevice) => {
    console.log(`Product name: ${usbDevice.productName}`);
  })
  .catch((e) => {
    console.error(`There is no device. ${e}`);
  });

规范

规范
WebUSB API
# dom-usb-requestdevice

浏览器兼容性