调试硬件还要装驱动?现在浏览器自己就能连——WebUSB API 把我从 USB 协议里彻底解放了
我配了三年 USB 设备调试,每次都要写原生桥接代码或者让用户装驱动——现在浏览器自己会连了,WebUSB API 把这件事彻底变了。
Chrome 61 开始支持的这个 API,核心价值就一句:把以前只有原生应用能访问的非标准化 USB 设备,还给网页。
传统方案的问题很清楚:键盘、鼠标、摄像头这些标准化设备,OS 有内置驱动,网页直接用没问题。但到了非标准化设备——工业传感器、定制硬件、实验设备——对不起,必须装原生驱动,必须 native code,浏览器根本碰不到。用户换电脑要重装驱动,开发者维护跨平台桥接代码,维护成本极高。
WebUSB 干的事情,就是把这个壁垒打掉。设备插上后浏览器弹出通知,用户授权,页面直接拿到 USBDevice 对象,可以发控制传输、批量传输,可以读固件信息,可以做固件更新。制造商不用写浏览器专用的 API,浏览器原生就支持了。
navigator.usb.requestDevice({ filters: [{ vendorId: 0x1234 }] })
.then(device => device.open())
.then(device => device.selectConfiguration(1))
.then(device => device.claimInterface(0))
.then(device => device.transferOut(1, data))
.then(result => console.log("USB transfer done", result))
这个 API 背后是三个接口:USB 是主入口,负责枚举和连接设备;USBConnectionEvent 处理设备的插拔事件;USBDevice 则是对具体设备的操作抽象,bulkTransfer、controlTransfer、isochronousTransfer 全在里面。
// 监听设备插拔,不用轮询
navigator.usb.addEventListener("connect", e => {
console.log("设备已连接:", e.device.productName);
});
navigator.usb.addEventListener("disconnect", e => {
console.log("设备已断开");
});
实际场景里最有用的是固件更新和设备调试。硬件开发者以前给设备更新固件要写桌面应用,现在直接打开一个网页就可以推送。调试物联网设备也不需要串口工具,浏览器里就能交互。现在连 3D 打印机、开源硬件开发板都可以直接通过网页操作。
需要注意的是安全模型:设备必须用户主动授权才能连接,不能静默访问;浏览器会显示设备来自哪个厂商,帮助用户判断是否信任;敏感设备建议结合 Permission API 做二次确认。
下一步很直接:去 MDN 文档把 WebUSB 的示例跑一遍,找一个手边的 USB 设备试试。如果你在做硬件相关的 Web 产品,这个 API 可以直接把设备控制能力搬到浏览器里,不需要再维护跨平台的原生桥接代码了。
评论区
登录后可评论。