NDEFRecord:toRecords() 方法

可用性有限

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

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

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

toRecords() 方法是 NDEFRecord 接口的方法,它根据 NDEFRecord.recordTypeNDEFRecord.data 转换为一系列记录,并返回结果。这允许解析可能包含嵌套记录的记录类型的有效负载,例如智能海报和外部类型记录。

语法

js
toRecords()

参数

无。

返回值

一个 NDEFRecord 列表。

异常

NotSupported DOMException

指示 用户代理 不知道如何解析 NDEFRecord.dataNDEFRecord.recordType 的这种组合。

示例

读取有效负载为 NDEF 消息的外部记录

此示例使用外部类型记录来创建应用程序定义的记录。这些记录可能包含一个 NDEFMessage 作为有效负载,以及它自己的 NDEFRecord 对象,包括在应用程序上下文中使用的本地类型。请注意,智能海报记录类型也包含一个 NDEF 消息作为有效负载。

由于 NDEF 对记录的排序没有保证,因此使用带有 NDEF 消息作为有效负载的外部类型记录对于封装相关数据非常有用。

此示例演示如何读取社交帖子类型的外部记录,该记录包含一个 NDEFMessage,其中包含一个文本记录和一个本地类型为“act”(操作)的记录,其定义借鉴自智能海报,但在本地应用程序上下文中使用。

js
const ndefReader = new NDEFReader();
await ndefReader.scan();
ndefReader.onreading = (event) => {
  const externalRecord = event.message.records.find(
    (record) => record.type === "example.com:smart-poster",
  );

  let action, text;

  for (const record of externalRecord.toRecords()) {
    if (record.recordType === "text") {
      const decoder = new TextDecoder(record.encoding);
      text = decoder.decode(record.data);
    } else if (record.recordType === ":act") {
      action = record.data.getUint8(0);
    }
  }

  switch (action) {
    case 0: // do the action
      console.log(`Post "${text}" to timeline`);
      break;
    case 1: // save for later
      console.log(`Save "${text}" as a draft`);
      break;
    case 2: // open for editing
      console.log(`Show editable post with "${text}"`);
      break;
  }
};

规范

规范
Web NFC API
# dom-ndefrecord-torecords

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。