Signatur
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
"/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);
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));
});
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));
};
});
// 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 windowprüfen. - Sicherer Kontext: Die API steht nur unter HTTPS zur Verfügung. Nur Frames der obersten Ebene dürfen sie nutzen.
scan()undwrite()brauchen eine Nutzeraktion und die NFC-Berechtigung, sonst wird einNotAllowedErrorausgelöst. - Wert
null: Viele Tags, die von anderen Apps beschrieben wurden, haben keine Kennung. Den Wert daher immer aufnullprü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
idist deshalb kein Echtheitsnachweis und darf nicht ungeprüft für sicherheitsrelevante Entscheidungen oder als HTML-Ausgabe verwendet werden. - Nur lesbar: Eine Zuweisung an
record.idhat keine Wirkung.