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

瀏覽器相容性