WebUSB 是受限的安全接口,仅 Chrome 等 Chromium 浏览器支持,需 HTTPS、用户主动触发、设备兼容描述符;仅支持控制与批量传输,无 HID 原生支持,权限需手动授权且不持久,功能受沙箱严格限制。

JavaScript 不能直接操作 USB 设备,必须通过 WebUSB API,且仅在特定条件下可用。它不是万能接口,而是受浏览器、操作系统和用户授权严格约束的安全通道。
WebUSB 的基本前提
要使用 WebUSB,必须满足以下硬性条件:
- 页面运行在 HTTPS 协议下(localhost 除外,开发时可豁免)
- 用户主动触发(如点击按钮),不能在页面加载时自动调用
navigator.usb.requestDevice() - 目标设备需有 WebUSB 兼容描述符(或由操作系统/驱动隐式支持,如部分 CDC 类设备)
- 仅支持 Chrome 及基于 Chromium 的浏览器(Edge、Opera 等),Firefox 和 Safari 不支持
常见权限与用户交互限制
WebUSB 强制要求用户显式授权,每次访问新设备或重启后都需重新选择:
- 调用
navigator.usb.requestDevice({ filters })会弹出系统级设备选择框,用户必须手动点选 - 授权只对当前设备 + 当前网站生效,关闭标签页即失效;刷新页面后需再次授权
- 无法绕过选择框批量连接多个设备,也不能后台静默连接
- 用户可随时在浏览器地址栏点击锁形图标 → “网站设置” → 撤销 USB 权限
功能与协议层面的限制
WebUSB 提供的是底层 USB 通信能力,但能力有限:
标签: javascript java 操作系统 浏览器 edge 端口 工具 usb safari
还木有评论哦,快来抢沙发吧~