【发布时间】:2021-02-08 23:55:55
【问题描述】:
我让 LibNFC 在 Linux 终端上工作,识别我的 ACR122U 阅读器,我想知道是否有一种方法可以通过 Linux 桌面上的 Chrome 工作,因为它与 Android 支持非常相似,具有所有 NFC 设备由 libnfc 完成的处理,浏览器只需要知道这个库,而不是每一种类型的 USB 或其他可以做 NFC 的设备。
我已经尝试使用 WebNFC API 来连接它:
document.getElementById("scanButton").addEventListener("click", async () => {
log.innerHTML = "NFC Register started...";
try {
const ndef = new NDEFReader();
await ndef.scan();
log.innerHTML = ("> Scan started");
ndef.addEventListener("readingerror", () => {
log.innerHTML = ("Argh! Cannot read data from the NFC tag. Try another one?");
});
ndef.addEventListener("reading", ({ message, serialNumber }) => {
log.innerHTML = ("ID ${serialNumber} logged @" + dt.toLocaleTimeString()); });
} catch (error) {
log.innerHTML = (error);
}
});
document.getElementById("stopButton").onclick = function(){
log.innerHTML = "NFC Register stopped @ " + new Date().toLocaleTimeString();
};
但我遇到了Error: NFC Permission Request denied
以及用于连接它的 WebUSB API:
var usbd = {};
let device;
let deviceEndpoint = 0x02;
let powerUpDevice = new Uint8Array([0x62,0x00, 0x00, 0x00, 0x00,0x00,0x00,0x01,0x00, 0x00]).buffer;
let getCardUID = new Uint8Array([0xff,0xca,0x00,0x00,0x04]).buffer;
(function() {
'use strict';
usbd.authorize = function(){
navigator.usb.requestDevice({ filters: [{ vendorId: 0x072f }] })
.then(selectedDevice => {
device = selectedDevice;
console.log(device.configuration.interfaces[0].interfaceNumber);
console.log(device.manufacturerName);
console.log(device.productName);
console.log(device);
return device.open()
.then(() => {
if (device.configuration === null) {
return device.selectConfiguration(1);
}
});
})
.then(() => device.claimInterface(0))
但我遇到了Error: ...blocked because it implements a protected interface class,即不支持,所以这是不行的。
有没有办法整合 libusb/libnfc 库或任何其他方法来直接连接 NFC 阅读器以读取到网络浏览器/应用程序?
【问题讨论】:
-
您需要用户下载或运行运行
localhost网络服务器的程序,您的网络应用程序可以连接到该服务器以使用本地硬件 - 这就是戴尔服务标签查找功能的工作原理,例子。 -
哦,谢谢你的好例子;我认为这可能是我的 B 计划,但我真的希望它是一个独立的 Web 应用程序,无需安装额外的程序。至少那时它可以在多个平台上运行,但是非常感谢你的解决方案——如果一切都失败了,我会依靠它:)
-
您是否尝试过在 https:// 网络应用程序中运行您的 WebNFC 示例(例如,使用letsencrypt 免费证书)?据我了解,您需要处于安全环境中才能访问 NFC 阅读器(这就是为什么 WebNFC 在线实验应该从这个 https:// 配置的网站 googlechrome.github.io/samples/web-nfc 工作)
-
@FSp 是的,我在 localhost 环境和 https 域地址中都使用该应用程序来测试应用程序。我认为这主要是 ACR122U 阅读器的问题......
标签: javascript google-chrome libusb lib-nfc webnfc