NDEFReader: Methode write()
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Die Methode write() der NDEFReader-Schnittstelle versucht, eine NDEF-Nachricht auf einen Tag zu schreiben. Sie gibt ein Promise zurück, das erfüllt wird, sobald die Nachricht auf den Tag geschrieben wurde, oder bei einem Hardware- oder Berechtigungsfehler abgelehnt wird. Diese Methode löst eine Berechtigungsanfrage aus, wenn die Berechtigung „nfc“ noch nicht erteilt wurde.
Syntax
write(message)
write(message, options)
Parameter
message-
Die zu schreibende Nachricht: ein String, ein
ArrayBuffer, einTypedArray, eineDataViewoder ein Array von Datensätzen. Ein Datensatz hat folgende Eigenschaften:dataOptional-
Enthält die zu übertragenden Daten: einen String, ein
ArrayBuffer, einTypedArray, eineDataViewoder ein Array verschachtelter Datensätze. encodingOptional-
Ein String, der die Kodierung des Datensatzes angibt.
idOptional-
Eine vom Entwickler festgelegte Kennung für den Datensatz.
langOptional-
Ein gültiges BCP-47-Sprachtag.
mediaTypeOptional-
Ein gültiger MIME-Typ.
recordType-
Ein String, der den Typ der in
datagespeicherten Daten angibt. Er muss einen der folgenden Werte haben:"absolute-url"-
Eine absolute URL zu den Daten.
"empty"-
Ein leerer
NDEFRecord. "mime"-
Ein gültiger MIME-Typ.
"smart-poster"-
Ein Smart Poster gemäß der NDEF-SMARTPOSTER-Spezifikation.
"text"-
Text gemäß der NDEF-TEXT-Spezifikation.
"unknown"-
Der Typ des Datensatzes ist unbekannt.
"URL"-
Eine URL gemäß der NDEF-URI-Spezifikation.
optionsOptional-
Ein Objekt mit folgenden Eigenschaften:
overwrite-
Ein boolescher Wert, der angibt, ob vorhandene Datensätze überschrieben werden sollen.
signalOptional-
Ein
AbortSignal, mit dem der aktuelle Schreibvorgang abgebrochen werden kann.
Rückgabewert
Ein Promise, das erfüllt wird, sobald eine Nachricht auf den Tag geschrieben wurde, oder bei einem Hardware- oder Berechtigungsfehler abgelehnt wird.
Ausnahmen
Diese Methode löst keine Ausnahmen aus. Stattdessen wird das zurückgegebene Promise mit einer DOMException abgelehnt, deren name einer der folgenden Werte ist:
AbortErrorDOMException-
Der Scanvorgang wurde mit dem im Argument
optionsübergebenenAbortSignalabgebrochen. NotAllowedErrorDOMException-
Die Berechtigung für diesen Vorgang wurde verweigert, oder
overwriteistfalseund auf dem Tag befinden sich bereits Datensätze. NotSupportedErrorDOMException-
Es ist kein mit Web NFC kompatibler NFC-Adapter vorhanden, der verfügbare NFC-Adapter unterstützt das Übertragen von Nachrichten nicht oder es kann keine Verbindung hergestellt werden.
NotReadableErrorDOMException-
Der User-Agent darf nicht auf den zugrunde liegenden NFC-Adapter zugreifen (z. B. aufgrund einer Benutzereinstellung).
NetworkErrorDOMException-
Die Übertragung ist fehlgeschlagen, nachdem sie bereits begonnen hatte (z. B. weil der Tag vom Lesegerät entfernt wurde).
Beispiele
>Einen Textstring schreiben
Das folgende Beispiel zeigt, wie Sie einen String auf einen NFC-Tag schreiben und dabei auftretende Fehler behandeln.
const ndef = new NDEFReader();
ndef
.write("Hello World")
.then(() => {
console.log("Message written.");
})
.catch((error) => {
console.log(`Write failed :-( try again: ${error}.`);
});
Eine URL schreiben
Das folgende Beispiel zeigt, wie Sie ein oben beschriebenes Datensatzobjekt auf einen NFC-Tag schreiben und dabei auftretende Fehler behandeln.
const ndef = new NDEFReader();
try {
await ndef.write({
records: [{ recordType: "url", data: "http://example.com/" }],
});
} catch {
console.log("Write failed :-( try again.");
}
Einen Schreibvorgang mit einem Zeitlimit versehen
Manchmal ist es sinnvoll, für einen Schreibvorgang ein Zeitlimit festzulegen. Wenn Sie beispielsweise einen Benutzer bitten, einen Tag an das Lesegerät zu halten, aber innerhalb einer bestimmten Zeit kein Tag gefunden wird, können Sie den Vorgang wegen Zeitüberschreitung abbrechen.
const ndef = new NDEFReader();
ndef.onreading = (event) => console.log("We read a tag!");
function write(data, { timeout } = {}) {
return new Promise((resolve, reject) => {
const controller = new AbortController();
controller.signal.onabort = () =>
reject(new Error("Time is up, bailing out!"));
setTimeout(() => controller.abort(), timeout);
ndef.addEventListener(
"reading",
(event) => {
ndef.write(data, { signal: controller.signal }).then(resolve, reject);
},
{ once: true },
);
});
}
await ndef.scan();
try {
// Let's wait for 5 seconds only.
await write("Hello World", { timeout: 5_000 });
} catch (err) {
console.error("Something went wrong", err);
} finally {
console.log("We wrote to a tag!");
}
Spezifikationen
| Spezifikation |
|---|
| Web NFC> # dom-ndefreader-write> |