【问题标题】:Google Chrome WebUSB API requestDevices() doesn't see barcode scanner Voyager 1450gGoogle Chrome WebUSB API requestDevices() 看不到条形码扫描仪 Voyager 1450g
【发布时间】:2018-11-22 01:48:48
【问题描述】:

我正在尝试访问通过 USB 连接的 Voyager 1450g 条形码扫描仪,但 navigator.usb.requestDevices() 看不到此设备。

let button = document.getElementById('request-device');
button.addEventListener('click', async () => {
let device;
try {
    device = await navigator.usb.requestDevice({ filters: [{}]});
} catch (err) {
    // No device was selected.
    console.log('Error:', err);
}

如有任何想法,我将不胜感激。

【问题讨论】:

    标签: webusb


    【解决方案1】:

    我有一台 Honeywell Voyagar 1202g 条码扫描器,我设法在 Mac 和 Windows 上使用它。

    首先,您需要将条形码扫描仪界面更改为 CDC-ACM,方法是使用 EZConfig(霍尼韦尔软件)或扫描您可以在其网站上找到的条形码。

    使其在 Windows 上运行的步骤:

    1. 安装 Zadig
    2. 安装 HSM USB 串行驱动程序包
    3. 在 Windows 设置中找到您的设备并更新 USB 复合设备驱动程序(让我从驱动程序列表中选择,取消选中可兼容的驱动程序)以使用 Honeywell->WinFlash Intermec 设备(没有这一步 Zadig 无法找到正确的接口)。
    4. 使用 Zadig,您现在应该可以看到您的设备,将驱动程序更新到 libusbk
    5. 重启电脑(重要)

    代码:

    const decoder = new TextDecoder();
    
    const startDevice = async () => {
        try {
            // you should be able to discover your PRODUCT_ID and VENDOR_ID from
            // chrome://device-log
            const device = await navigator.usb.requestDevice({
                filters: {
                    productId: PRODUCT_ID,
                    vendorId: VENDOR_ID
                }
            });
    
            // log device data to see available configurations and interfaces
            await device.open();
            // only 1 configuration was available for me
            await device.selectConfiguration(1);
            // interface 1 was bulk transfer
            await device.claimInterface(1);
    
            readLoop(device);
        } catch (error) {
            console.error(error);
        }
    }
    
    const readLoop = async (device) => {
        try {
            const result = await device.transferIn(1, 64);
            // this is your incoming data
            const data = decoder.decode(result.data).trim();
    
            readLoop(device);
        } catch (error) {
            console.error(error);
        }
    }
    

    【讨论】:

    • 我有一个问题。它是否允许在浏览器窗口最小化且没有焦点的情况下将数据从条形码扫描仪发送到网站?例如。网站已打开,但浏览器已最小化,用户正常使用计算机,但条码扫描器仍向网站发送数据,无需用户打开并聚焦网站页面?
    • @Kenna 你想出了解决方案吗?
    • 是的,我可以实现它以便它简单地工作,即使浏览器窗口没有被用户关注。我的解决方案(与答案中提出的不同)允许浏览器应用程序直接从条形码扫描仪接收数据,以便它可以将其用于所需的处理。我记得我必须搜索一些文档才能正确实现所有内容,但这并不难。如果您需要帮助,请告诉我。
    【解决方案2】:

    我的猜测是虚拟串行端口驱动程序(将其安装为 COM3)已捕获该设备。可以卸载驱动重试吗?

    【讨论】:

    • 我做了几次。不幸的是,它没有帮助。
    • 不仅要卸载虚拟串口驱动,还得让Windows加载WinUSB驱动。 Zadig 工具旨在简化此操作。
    猜你喜欢
    • 1970-01-01
    • 2017-11-10
    • 2012-08-08
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    相关资源
    最近更新 更多