首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从NFC读取器直接读取到桌面web应用程序?

从NFC读取器直接读取到桌面web应用程序?
EN

Stack Overflow用户
提问于 2021-02-08 23:55:55
回答 1查看 4.2K关注 0票数 0

我让LibNFC在Linux终端上工作,以识别我的ACR122U阅读器,我想知道是否有一种方法可以让它在Linux桌面上通过Chrome工作,因为它确实类似于Android支持,所有的ACR122U设备处理都是由libnfc完成的,浏览器只需要知道这个库,而不是每种类型的usb或其他设备。

我尝试使用WebNFC API连接它:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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读取器以读入web浏览器/应用程序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-10 06:54:35

从2021年2月起,安卓才支持网络NFC。请参阅https://web.dev/nfc/

WebUSB错误提示您请求一个实现受保护类的接口(在下面的类中):

代码语言:javascript
复制
  // USB Class Codes are defined by the USB-IF:
  // https://www.usb.org/defined-class-codes
  const uint8_t kProtectedClasses[] = {
      0x01,  // Audio
      0x03,  // HID
      0x08,  // Mass Storage
      0x0B,  // Smart Card
      0x0E,  // Video
      0x10,  // Audio/Video
      0xE0,  // Wireless Controller (Bluetooth and Wireless USB)
  };

我想知道这是否是linux的问题,因为我能够通过ACR122U和SCL3711 NFC读取器WebUSB设备进行通信。请参阅https://github.com/beaufortfrancois/chrome-nfc

你有没有试过先尝试WebHID?请参阅https://web.dev/hid

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66111078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档