You need to enable JavaScript to run this app. WebUSB的USBDevice.configurations在Mac和Android平台表现差异问询
优惠活动
大模型
产品
解决方案
定价
更多

WebUSB的USBDevice.configurations在Mac和Android平台表现差异问询

问题成因
  • Chrome for Android 91版本的WebUSB实现存在权限前置限制:桌面端Chrome允许在requestDevice完成设备选择后直接读取配置项,但Android端Chrome要求必须先获取Android系统级USB Host访问权限、且完成device.open()调用后才会填充configurations属性,未完成权限授予和设备打开前该属性默认返回空数组。
  • Android系统对USB打印机类(USB Class 0x07)设备存在默认接管逻辑:部分Android系统会默认将匹配到的USB打印机设备分配给系统打印服务,没有释放设备访问权限给第三方应用(包括Chrome浏览器),导致WebUSB无法读取设备配置参数。
  • Chrome 91 for Android存在已知的WebUSB配置枚举漏洞,该版本对部分厂商的USB设备描述符解析逻辑存在缺陷,会偶发配置读取失败的问题。
可行解决方案
  1. 调整代码执行顺序,拿到设备对象后先触发open操作再读取配置,示例代码如下:
const device = await navigator.usb.requestDevice({ filters: [{}] });
// 执行open操作会触发Android系统USB权限申请弹窗,用户授权后即可拿到设备控制权
await device.open();
// 此时读取配置项即可获取到正常返回值
console.log(device.configurations);
  1. 调整Android系统打印服务设置,进入「设置 - 连接的设备 - 打印服务」,关闭系统默认打印服务对CITIZEN CT-E651打印机的自动接管,释放设备控制权。
  2. 将移动端Chrome浏览器升级到92及以上版本,Chrome 92已修复91版本存在的WebUSB配置枚举漏洞。
  3. 优化设备筛选规则,在requestDevice参数中指定打印机类和对应厂商ID,提升设备识别准确性,避免权限冲突:
const device = await navigator.usb.requestDevice({ 
  filters: [{ 
    classCode: 0x07, // USB打印机类标准分类码
    vendorId: 0x0483 // 可替换为CITIZEN CT-E651的实际厂商ID
  }] 
});

内容的提问来源于stack exchange,提问作者Wouter Raateland

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 17:54:02