WebUSB API

安全上下文: 此项功能仅在一些支持的浏览器安全上下文(HTTPS)中可用。

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

WebUSB API 提供了一种将非标准通用串行总线(USB)兼容设备服务暴露到 web 的方法,使 USB 更安全,更易于使用。

概念和用法

USB 是有线外设的事实标准。连接到计算机的 USB 设备通常分为许多类型:如键盘、鼠标、视频设备等。这些是使用操作系统的类驱动程序支持的。其中许多也可以在 web 中通过 WebHID API 进行访问。

除了这些标准化的设备之外,还有大量的设备不属于任何类别。这些设备需要自定义驱动程序,并且由于需要机器代码(native code),因此无法从 web 访问。安装这些设备,通常需要在制造商的网站上搜索驱动程序,如果你想在另一台电脑上使用该设备,还必须重复这个过程。

WebUSB 为这些非标准化的 USB 设备服务提供了一种在 web 中可用的方式。这意味着硬件制造商将能够为他们的设备提供一种从 web 访问的方式,而不必提供自己的 API。

当连接新的与 WebUSB 兼容的设备时,浏览器会显示一条包含制造商网站链接的通知。进入网站后,浏览器会弹出提示,请求连接到设备,然后设备就可以使用了。不需要下载和安装驱动程序。

接口

USB

提供从网页中查找和连接 USB 设备的属性和方法。

USBConnectionEvent

当用户代理检测到一个新的 USB 设备已经连接,或从主机断开时,传递给 USB connectdisconnect 事件的事件类型。

USBDevice

提供对已配对的 USB 设备的元数据的访问以及控制方法。

USBInTransferResult

表示请求数据从 USB 设备传输到 USB 宿主的结果。

USBOutTransferResult

表示请求数据从 USB 宿主传输到 USB 设备的结果。

USBIsochronousInTransferPacket

表示在一个同步端点上从 USB 设备向 USB 宿主传输数据的请求中的单个包的状态。

USBIsochronousInTransferResult

表示请求数据从 USB 设备传输到 USB 宿主的结果。

USBIsochronousOutTransferPacket

表示在一个同步端点上从 USB 宿主向 USB 设备传输数据的请求中的单个包的状态。

USBIsochronousOutTransferResult

表示请求数据从 USB 宿主传输到 USB 设备的结果。

USBConfiguration

提供有关 USB 设备的特定配置及其支持的接口的信息。

USBInterface

提供 USB 设备所提供的接口信息。

USBAlternateInterface

提供有关 USB 设备所提供的接口的特定配置的信息。

USBEndPoint

提供有关 USB 设备所提供的端点的信息。

示例

访问连接的设备

下面的示例演示了如何使用 USB.requestDevice() 访问连接的 Arduino 设备,其 vendorId 为 0x2341

js
navigator.usb
  .requestDevice({ filters: [{ vendorId: 0x2341 }] })
  .then((device) => {
    console.log(device.productName); // "Arduino Micro"
    console.log(device.manufacturerName); // "Arduino LLC"
  })
  .catch((error) => {
    console.error(error);
  });

查找已连接的所有设备

你可以使用 USB.getDevices() 查找所有已连接的设备。在下面的示例中,展示了当 Arduino 设备连接时,如何将产品和制造商名称打印到控制台。

js
navigator.usb.getDevices().then((devices) => {
  devices.forEach((device) => {
    console.log(device.productName); // "Arduino Micro"
    console.log(device.manufacturerName); // "Arduino LLC"
  });
});

规范

Specification
WebUSB API

参见