Start · Sprachen · JavaScript · Referenz · NDEFRecord.id

NDEFRecord.id

Eigenschaft

Schreibgeschützte Eigenschaft, die die Datensatzkennung eines <code>NDEFRecord</code> als String liefert – eine absolute oder relative URL, oder <code>null</code>, wenn keine gesetzt ist.

seit JavaScript Experimentell: nur Chrome für Android 89+ (Web NFC Kategorie: webapi

Signatur

NDEFRecord.id

Beschreibung

Die Eigenschaft id gehört zur Schnittstelle NDEFRecord der Web-NFC-API. Sie gibt den Bezeichner (Record Identifier) eines NDEF-Datensatzes zurück. Das ist eine absolute oder relative URL, mit der man einen Datensatz innerhalb einer NDEF-Nachricht eindeutig erkennt. Andere Datensätze oder die Anwendung können sich darüber auf ihn beziehen.

Die Kennung setzt man beim Schreiben über das Feld id im Record-Init-Objekt, das an NDEFReader.prototype.write() übergeben wird. Beim Lesen findet man sie dann im Ereignis reading unter event.message.records[i].id. Wurde beim Schreiben keine Kennung angegeben, ist der Wert null.

In der Praxis ist id nützlich, wenn ein Tag mehrere Datensätze desselben Typs enthält und die Anwendung sie gezielt unterscheiden soll. Ein Beispiel ist ein Tag mit einer Produkt-URL und zusätzlich einem internen Inventar-Datensatz. Auch in verschachtelten Nachrichten wie Smart-Poster-Datensätzen lassen sich Teile so benennen.

Die Eigenschaft ist schreibgeschützt. Ein Datensatz lässt sich nach dem Lesen nicht verändern. Um eine andere Kennung zu setzen, muss man einen neuen Datensatz auf das Tag schreiben.

Rückgabewert

Typ
string | null
Beschreibung
Die Datensatzkennung als String, meist eine absolute oder relative URL wie "/inventar/4711". null, wenn für den Datensatz keine Kennung gesetzt ist.

Beispiele

Kennung beim Lesen eines NFC-Tags ausgeben

const tagLesen = async () => {
  if (!('NDEFReader' in window)) {
    console.log('Web NFC wird nicht unterstützt.');
    return;
  }
  const reader = new NDEFReader();
  await reader.scan(); // muss durch eine Nutzeraktion ausgelöst werden

  reader.addEventListener('reading', ({ message, serialNumber }) => {
    console.log(`Tag ${serialNumber}:`);
    for (const record of message.records) {
      console.log(`Typ: ${record.recordType}, ID: ${record.id ?? '(keine)'}`);
    }
  });
};

document.querySelector('#scan').addEventListener('click', tagLesen);
Tag 04:a2:3c:1f:77:80:00: Typ: url, ID: /produkt Typ: text, ID: (keine)

Datensätze mit Kennung schreiben

const tagBeschreiben = async () => {
  const writer = new NDEFReader();
  await writer.write({
    records: [
      { recordType: 'url', data: 'https://shop.example/p/4711', id: '/produkt' },
      { recordType: 'text', data: 'Lagerplatz B-12', id: '/inventar/4711' }
    ]
  });
  console.log('Tag erfolgreich beschrieben.');
};

document.querySelector('#schreiben').addEventListener('click', () => {
  tagBeschreiben().catch((err) => console.error('Fehler:', err.name));
});
Tag erfolgreich beschrieben.

Einen bestimmten Datensatz anhand der ID finden

const reader = new NDEFReader();

document.querySelector('#scan').addEventListener('click', async () => {
  await reader.scan();
  reader.onreading = ({ message }) => {
    const inventar = message.records.find((r) => r.id === '/inventar/4711');
    if (!inventar) {
      console.log('Kein Inventar-Datensatz gefunden.');
      return;
    }
    const decoder = new TextDecoder(inventar.encoding ?? 'utf-8');
    console.log('Lagerplatz:', decoder.decode(inventar.data));
  };
});
Lagerplatz: Lagerplatz B-12

// Wichtig · Fallstricke

  • Kompatibilität: Web NFC ist experimentell und gehört nicht zum Standard der Plattform. Es funktioniert nur in Chrome für Android ab Version 89. Desktop-Browser, Firefox und Safari (auch unter iOS) unterstützen es nicht. Verfügbarkeit daher immer mit 'NDEFReader' in window prüfen.
  • Sicherer Kontext: Die API steht nur unter HTTPS zur Verfügung. Nur Frames der obersten Ebene dürfen sie nutzen. scan() und write() brauchen eine Nutzeraktion und die NFC-Berechtigung, sonst wird ein NotAllowedError ausgelöst.
  • Wert null: Viele Tags, die von anderen Apps beschrieben wurden, haben keine Kennung. Den Wert daher immer auf null prüfen, zum Beispiel mit ?? oder optionaler Verkettung.
  • Keine Auflösung der URL: Die Kennung wird nur als String geliefert und nicht gegen eine Basis-URL aufgelöst. Relative Werte bleiben also relativ.
  • Nicht geschützt: NFC-Tags lassen sich meist beliebig beschreiben. Eine id ist deshalb kein Echtheitsnachweis und darf nicht ungeprüft für sicherheitsrelevante Entscheidungen oder als HTML-Ausgabe verwendet werden.
  • Nur lesbar: Eine Zuweisung an record.id hat keine Wirkung.