NDEFReader: write() Methode
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 write()-Methode der NDEFReader-Schnittstelle versucht, eine NDEF-Nachricht auf ein Tag zu schreiben und gibt ein Promise zurück, das entweder aufgelöst wird, wenn eine Nachricht auf das Tag geschrieben wurde, oder abgelehnt wird, wenn ein Hardware- oder Berechtigungsfehler aufgetreten ist. Diese Methode löst eine Berechtigungsabfrage aus, wenn die "nfc"-Berechtigung zuvor nicht erteilt wurde.
Syntax
write(message)
write(message, options)
Parameter
message-
Die zu schreibende Nachricht, entweder ein String, ein
ArrayBuffer, einTypedArray, einDataViewoder ein Array von Datensätzen. Ein Datensatz hat die folgenden Mitglieder:dataOptional-
Enthält die zu übertragenden Daten, ein String, ein
ArrayBuffer, einTypedArray, einDataViewoder ein Array von verschachtelten Datensätzen. encodingOptional-
Ein String, der die Kodierung des Datensatzes angibt.
idOptional-
Ein vom Entwickler definierter Identifikator für den Datensatz.
langOptional-
Ein gültiger BCP 47 Sprach-Tag.
mediaTypeOptional-
Ein gültiger MIME-Typ.
recordType-
Ein String, der den Typ der in
datagespeicherten Daten angibt. Er muss einer der folgenden Werte sein:"absolute-url"-
Eine absolute URL zu den Daten.
"empty"-
Ein leerer
NDEFRecord. "mime"-
Ein gültiger MIME-Typ.
"smart-poster"-
Ein smart-poster, wie in der NDEF-SMARTPOSTER Spezifikation definiert.
"text"-
Text, wie in der NDEF-TEXT Spezifikation definiert.
"unknown"-
Der Datensatztyp ist nicht bekannt.
"URL"-
Eine URL, wie in der NDEF-URI Spezifikation definiert.
optionsOptional-
Ein Objekt mit den folgenden Eigenschaften:
overwrite-
Ein boolescher Wert, der angibt, ob vorhandene Datensätze überschrieben werden sollen, falls solche existieren.
signalOptional-
Ein
AbortSignal, das die aktuelle Schreiboperation abbrechen kann.
Rückgabewert
Ein Promise, das entweder aufgelöst wird, wenn eine Nachricht auf das Tag geschrieben wurde, oder abgelehnt wird, wenn ein Hardware- oder Berechtigungsfehler aufgetreten ist.
Ausnahmen
Diese Methode löst keine Ausnahmen aus; stattdessen wird das zurückgegebene Promise abgelehnt,
und ein DOMException wird weitergegeben, dessen name einer der
folgenden ist:
AbortError-
Der Scanvorgang wurde mit dem
AbortSignalabgebrochen, das imoptions-Argument übergeben wurde. NotAllowedError-
Die Berechtigung für diesen Vorgang wurde abgelehnt oder
overwriteistfalse, und es befinden sich bereits Datensätze auf dem Tag. NotSupportedError-
Es gibt keinen NFC-Adapter, der mit Web NFC kompatibel ist, oder der verfügbare NFC-Adapter unterstützt das Senden von Nachrichten nicht, oder die Verbindung kann nicht hergestellt werden.
NotReadableError-
Dem UA ist der Zugriff auf den zugrunde liegenden NFC-Adapter nicht gestattet (z. B. aufgrund der Benutzerpräferenz).
NetworkError-
Der Transfer ist fehlgeschlagen, nachdem er bereits gestartet wurde (z. B. wurde das Tag vom Leser entfernt).
Beispiele
>Schreiben eines Textstrings
Das folgende Beispiel zeigt, wie ein String auf einem NFC-Tag geschrieben wird und wie auf auftretende Fehler reagiert wird.
const ndef = new NDEFReader();
ndef
.write("Hello World")
.then(() => {
console.log("Message written.");
})
.catch((error) => {
console.log(`Write failed :-( try again: ${error}.`);
});
Schreiben einer URL
Das folgende Beispiel zeigt, wie ein Datensatzobjekt (wie oben beschrieben) auf einem NFC-Tag geschrieben wird und wie auf auftretende Fehler reagiert wird.
const ndef = new NDEFReader();
try {
await ndef.write({
records: [{ recordType: "url", data: "http://example.com/" }],
});
} catch {
console.log("Write failed :-( try again.");
}
Planung eines Schreibvorgangs mit Timeout
Es ist manchmal nützlich, ein Zeitlimit für eine Schreiboperation festzulegen. Zum Beispiel bitten Sie den Benutzer, ein Tag zu berühren, aber es wird innerhalb eines bestimmten Zeitraums kein Tag gefunden, dann läuft die Zeit ab.
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> |