NDEFReader

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

NDEFReader 接口是 Web NFC API 的一部分,用于在兼容的 NFC 设备(例如支持 NDEF 的 NFC 标签)位于读取器的磁感应场内时,读取和写入数据到这些设备。

EventTarget NDEFReader

构造函数

NDEFReader() 实验性功能

返回一个新的 NDEFReader 对象。

实例方法

NDEFReader 接口继承了其父接口 EventTarget 的方法。

NDEFReader.scan() 实验性功能

激活一个读取设备,并返回一个 Promise。该 Promise 在 NFC 标签读取操作安排完成后解析,或者在遇到硬件或权限错误时拒绝。如果之前未授予 "nfc" 权限,此方法会触发权限提示。

NDEFReader.write() 实验性功能

尝试将 NDEF 消息写入标签,并返回一个 Promise。该 Promise 在消息成功写入标签后解析,或者在遇到硬件或权限错误时拒绝。如果之前未授予 "nfc" 权限,此方法会触发权限提示。

事件

继承其父级 EventTarget 的事件。

reading 实验性功能

当有兼容 NFC 设备的新读取数据可用时触发。

readingerror 实验性功能

当标签靠近读取设备但无法读取时触发。

示例

处理写入时的初始读取

下面的示例展示了如何协调通用的读取处理程序和用于单个写入的特定读取处理程序。为了进行写入,需要找到并读取一个标签。这使得您能够检查它是否确实是您想要写入的标签。因此,建议您在读取事件中调用 write()

js
const ndef = new NDEFReader();
let ignoreRead = false;

ndef.onreading = (event) => {
  if (ignoreRead) {
    return; // write pending, ignore read.
  }

  console.log("We read a tag, but not during pending write!");
};

function write(data) {
  ignoreRead = true;
  return new Promise((resolve, reject) => {
    ndef.addEventListener(
      "reading",
      (event) => {
        // Check if we want to write to this tag, or reject.
        ndef
          .write(data)
          .then(resolve, reject)
          .finally(() => (ignoreRead = false));
      },
      { once: true },
    );
  });
}

await ndef.scan();
try {
  await write("Hello World");
  console.log("We wrote to a tag!");
} catch (err) {
  console.error("Something went wrong", err);
}

规范

规范
Web NFC
# the-ndefreader-object

浏览器兼容性