跳转到内容

WebUSB API 浏览器支持

发布于

WebUSB API — WebUSB API 允许网页应用通过 navigator.usb.requestDevice() 请求访问非标准 USB 设备,并直接与其通信。

  • 图例
  • 支持
  • 部分支持
  • 需开启标志
  • 不支持
  • 未知
浏览器 / 平台支持版本置信度来源备注
Chrome (Desktop)支持61高来源—
Chrome (Android)支持61高来源1
Edge (Desktop)支持79高来源2
Firefox (Desktop)不支持—高来源3
Firefox (Android)不支持—高来源45
Safari (macOS)不支持—高来源6
Safari (iOS)不支持—高来源78
Samsung Internet支持8.0高来源9
WebView (Android)不支持—高来源10
Opera支持48高来源—
  1. 由 browser-compat-data 镜像自 Chrome 的数据推导。
  2. 由 browser-compat-data 镜像自 Chrome 的数据推导。
  3. browser-compat-data 未记录 Firefox 的支持。
  4. browser-compat-data 未记录 Firefox for Android 的支持。
  5. 由 browser-compat-data 镜像自 Firefox 的数据推导。
  6. browser-compat-data 未记录 Safari 的支持。
  7. browser-compat-data 未记录 iOS 版 Safari 的支持。
  8. 由 browser-compat-data 镜像自 Safari 的数据推导。
  9. 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
  10. browser-compat-data 未记录 WebView Android 的支持。

源数据: /compatibility/web-usb.json · 全球使用占比: 74 % (StatCounter 2026-05)

来源: 规范 · MDN · 最近核验 2026-10-03 · 置信度: 高 (由来源计算)

请求设备必须在用户手势内进行,filters 可将选择器限定为匹配指定 vendorId/productId 组合的设备。用户选择设备后,需要先打开设备,然后才能传输数据:

async function connectUsbDevice() {
const device = await navigator.usb.requestDevice({
filters: [{ vendorId: 0x1209, productId: 0xa800 }],
});
await device.open();
return device;
}

接下来要选择的配置和要声明的接口编号因设备而异,取决于该设备自身的描述符——应从 device.configurations 中读取具体值,再用读到的值调用 device.selectConfiguration() 和 device.claimInterface(),而不要假定固定的编号。

在提供该功能之前先检测 navigator.usb 是否存在,并为不支持的情况提供回退:

if ('usb' in navigator) {
connectButton.hidden = false;
} else {
connectButton.hidden = true;
fallbackNotice.textContent = '此浏览器无法在页面中访问 USB 设备。';
}
  • 需要安全上下文(HTTPS)——在普通 HTTP 源上不可用。
  • requestDevice() 需要短暂的用户激活(点击或按键处理函数);缺少时返回的 Promise 会以 SecurityError DOMException 拒绝。
  • claimInterface() 声明某个接口以供独占使用:同一时间只有一个执行上下文可以持有某个接口, 必须先调用 releaseInterface()(或关闭设备)释放它,其他上下文才能声明该接口。
  • 设备选择器只会列出匹配传入 filters 的设备,如果没有匹配设备,用户将无从选择, 导致返回的 Promise 被拒绝。
  • Firefox 和 Safari 未实现该 API,因此在这些浏览器中 'usb' in navigator 为 false, 依赖 USB 的流程需要使用上面的回退路径。

完整参考(设备配对、权限模型、着陆页)见 WebUSB API。

另见通过蓝牙实现相同流程的 Web Bluetooth API。

← 返回兼容性浏览器。