无法声明我可以通过device.configuration.interfaces看到的唯一接口

时间:2018-12-29 01:53:22

标签: google-chrome barcode barcode-scanner reader webusb

尝试通过WebUSB在Google Chrome版本10.14.1中的MacOS 71.0.3578.98上读取USB条码扫描器。

使用条形码扫描仪:https://www.ebay.co.uk/itm/Barcode-Scanner-USB-Handheld-Wired-Portable-Laser-Scan-Bar-Code-Reader-Scan-POS/282865082953

设备在requestDevice对话框中显示为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 {{1} })-由于最近的更改,预计该版本:https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/LZXocaeCwDw/GLfAffGLAAAJ

有什么办法可以以某种方式“更深入地调试”,因为我看不到仅使用可用接口的方法。

谢谢!

2 个答案:

答案 0 :(得分:0)

如果唯一的可用接口被阻止,则无法通过WebUSB API使用它。工作中还有一个单独的API WebHID,旨在满足在授予对提供HID接口的设备的访问权限时的特定要求。

答案 1 :(得分:0)

通过将扫描仪切换到不同的接口来解决此问题-有4种接口模式,其中一种(“ USB VCOM”)允许有2种接口可用,因此claimInterface(1)成功。