如何通过浏览器JS读取ACR122U NFC标签?设备无法识别求助
解决ACR122U NFC读卡器无法通过Web Serial/Web USB被浏览器识别的问题
首先明确:ACR122U不支持Web Serial,它是USB HID设备,只能通过Web USB API访问,无需再尝试navigator.serial相关方法。针对你遇到的设备无法被识别的问题,按以下步骤排查解决:
1. 用指定VID/PID精准匹配设备
ACR122U的厂商ID(VID)为0x072F,产品ID(PID)为0x2200,直接在请求设备时指定过滤条件,避免默认规则遗漏设备:
async function connectACR122U() { try { // 请求匹配ACR122U的USB设备 const device = await navigator.usb.requestPort({ filters: [{ vendorId: 0x072F, productId: 0x2200 }] }); // 初始化设备连接 await device.open(); await device.selectConfiguration(1); await device.claimInterface(0); // 定位IN端点并监听数据(ACR122U的IN端点为0x82) const inEndpoint = device.configuration.interfaces[0].alternate.endpoints.find(e => e.direction === 'in'); console.log("已连接ACR122U,开始监听数据..."); while (device.opened) { const result = await device.transferIn(inEndpoint.endpointNumber, 64); const data = new Uint8Array(result.data.buffer); console.log("读取到NFC数据:", data); } } catch (error) { console.error("连接或读取失败:", error); } } // 调用函数触发设备授权请求 connectACR122U();
2. 替换Windows驱动(关键操作)
ACR122U默认使用CCID类驱动,Web USB无法识别这类驱动的设备,需用Zadig工具替换为WinUSB:
- 打开Zadig工具,勾选"Options" -> "List All Devices"
- 在设备列表中找到"ACR122U NFC Reader"(或相似名称)
- 将驱动替换为WinUSB,点击"Replace Driver"完成操作
3. 其他排查要点
- 仅Chromium内核浏览器(Chrome、Edge等)支持Web USB,Firefox暂不支持
- 当前页面必须为HTTPS协议(本地开发可使用localhost)
- 关闭其他占用ACR122U的程序(如NFC管理软件),避免设备被独占
- 确认浏览器已授予当前网站USB设备访问权限(可在浏览器隐私安全设置中检查)
内容的提问来源于stack exchange,提问作者It's Time for TNPSC
相关产品推荐
相关产品推荐

