You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome89-92使用WebUSB读值出现DOMException传输错误该怎么解决?

Chrome 89+ WebUSB 传输错误解决方案

错误原因

Chrome 89及以上版本正式移除了旧版USB后端开关,默认启用的新USBDevice后端对传输参数合法性、设备驱动兼容性、请求时序的要求远高于旧版本,此前兼容旧后端的代码/配置不符合新规范就会抛出DOMException: a transfer error has occurred错误。

解决方案

1. 修正传输请求参数

  • 调用transferIn()时传入的端点号、缓冲区大小必须完全匹配USB设备描述符中对应端点的定义,缓冲区大小必须是端点最大包长(通常为64B/512B)的整数倍,新后端不支持旧版本的模糊匹配逻辑。
  • 避免并发发起多个未完成的传输请求,必须等上一次transferIn/transferOut的Promise返回结果后,再发起下一次请求,新后端不支持非队列化的并发传输。
  • 可主动设置更长的传输超时时间适配响应慢的设备,示例代码:
// 端点号1、缓冲区64字节、超时3000ms
const transferResult = await device.transferIn(1, 64, { timeout: 3000 });

2. 修复系统驱动/权限配置

  • Windows系统下目标USB设备必须使用WinUSB标准驱动,厂商自定义过滤驱动会导致新后端传输失败,可使用Zadig工具替换设备驱动为WinUSB,操作前注意备份原有驱动。
  • Linux系统下需要添加udev规则开放设备访问权限,规则示例(替换为你自己设备的VID和PID):
SUBSYSTEM=="usb", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="abcd", MODE="0666", GROUP="plugdev"
  • macOS系统下需要在系统安全与隐私设置中确认Chrome已经获得USB设备访问权限。

3. 临时过渡方案

如果暂时无法完成适配,可以通过Chrome启动参数强制启用旧USB后端,启动时添加参数--disable-new-usb-backend即可,该参数为Chromium内部调试参数,后续版本可能被移除,仅作为临时过渡使用。

内容的提问来源于stack exchange,提问作者Lakshman Rao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:24:02