NDEFRecord: toRecords() 方法

可用性有限

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

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

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

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

语法

js
toRecords()

参数

无。

返回值

NDEFRecord 记录列表。

异常

NotSupported DOMException

表示用户代理 (User Agent) 不知道如何解析 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
# dom-ndefrecord-torecords

浏览器兼容性