WebUSB API

可用性有限

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

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

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

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

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

概念与用法

USB 是有线外围设备的行业标准。您连接到计算机的 USB 设备通常分为多种设备类,例如键盘、鼠标、视频设备等。这些设备通过操作系统的类驱动程序得到支持。其中许多设备也可以通过 WebHID API 访问。

除了这些标准化设备之外,还有大量设备不属于任何类别。这些设备需要自定义驱动程序,并且由于需要原生代码才能利用它们,因此无法从 Web 访问。安装这些设备之一通常涉及在制造商的网站上搜索驱动程序,如果您想在另一台计算机上使用该设备,则需要再次重复此过程。

WebUSB 提供了一种将这些非标准化 USB 设备服务暴露给 Web 的方法。这意味着硬件制造商将能够提供一种方法,使其设备可以从 Web 访问,而无需提供自己的 API。

连接新的 WebUSB 兼容设备时,浏览器会显示一个通知,其中包含指向制造商网站的链接。到达网站后,浏览器会提示您授予连接设备的权限,然后即可使用该设备。无需下载和安装驱动程序。

接口

USB

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

USBConnectionEvent

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

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

浏览器兼容性

另见