WebUSB API

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

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

WebUSB API提供了一种方法,可以将非标准通用串行总线 (USB) 兼容设备服务公开到 Web,使 USB 更安全、更易于使用。

概念和用法

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

除了这些标准化的设备之外,还有大量设备不属于任何类别。这些设备需要自定义驱动程序,并且由于利用它们所需的本机代码而无法从 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"
  });
});

规范

规范
WebUSB API

另请参阅