尝试通过WebUSB在Google Chrome版本71.0.3578.98
中读取MacOS 10.14.1
上的USB条形码扫描仪。
使用条形码扫描仪:https://www.ebay.co.uk/itm/Barcode-Scanner-USB-Handheld-Wired-Portable-Laser-Scan-Bar-Code-Reader-Scan-POS/282865082953
设备在请求设备对话框中显示为Usb211
并成功打开,我在这里使用了代码:
const VENDOR_ID = 0x8888
navigator.usb.requestDevice({ filters: [{ vendorId: VENDOR_ID }] })
.then(selectedDevice => {
device = selectedDevice;
return device.open();
})
.then(() => device.selectConfiguration(1))
.then(() => device.claimInterface(device.configuration.interfaces[0].interfaceNumber)) # interfaceNumber is 0
.catch(error => { console.log(error); });
当我尝试claimInterface(0)
(这是device
对象中唯一可用的接口)时,它失败并出现错误An attempt to claim a USB device interface has been blocked because it implements a protected interface class.
(或SecurityError
DOMException The requested interface implements a protected class.
) - 由于最近的更改,这是意料之中的:https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/LZXocaeCwDw/GLfAffGLAAAJ
有没有办法以某种方式"更深入地调试",因为我看不到仅使用可用接口的方法。
谢谢!
如果唯一可用的接口被阻止,则无法通过WebUSB API使用它。有一个单独的 API WebHID,旨在满足授予对提供 HID 接口的设备的访问权限时的特定要求。
通过将扫描仪切换到不同的接口来解决此问题 - 有 4 种接口模式,其中一种("USB VCOM")允许有 2 个接口可用,因此claimInterface(1)
成功。