NDEFReader

可用性有限

此功能不是基线,因为它在一些最常用的浏览器中无法正常工作。

安全上下文:此功能仅在安全上下文(HTTPS)中可用,在一些或所有支持的浏览器中。

实验性:这是一个实验性技术
在生产环境中使用此功能之前,请仔细查看浏览器兼容性表

NDEFReaderWeb NFC API 的一个接口,用于从兼容的 NFC 设备读取数据并写入数据到这些设备,例如支持 NDEF 的 NFC 标签,当这些设备位于读卡器的磁感应场中时。

EventTarget NDEFReader

构造函数

NDEFReader() 实验性

返回一个新的 NDEFReader 对象。

实例方法

NDEFReader 接口继承了 EventTarget 的方法,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 API
# the-ndefreader-object

浏览器兼容性

BCD 表仅在浏览器中加载