NDEFReader: write()-Methode
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
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 einen Tag zu schreiben und gibt ein Promise
zurück, das entweder aufgelöst wird, wenn eine Nachricht auf den Tag geschrieben wurde, oder verworfen wird, wenn ein Hardware- oder Berechtigungsfehler auftritt. Diese Methode löst eine Berechtigungsaufforderung aus, wenn die "nfc"-Berechtigung nicht zuvor erteilt wurde.
Syntax
write(message)
write(message, options)
Parameter
message
-
Die zu schreibende Nachricht, entweder ein String, ein
ArrayBuffer
, einTypedArray
, einDataView
oder ein Array von Datensätzen. Ein Datensatz hat die folgenden Mitglieder:data
Optional-
Enthält die zu übertragenden Daten, ein String, ein
ArrayBuffer
, einTypedArray
, einDataView
oder ein Array von verschachtelten Datensätzen. encoding
Optional-
Ein String, der die Codierung des Datensatzes angibt.
id
Optional-
Eine vom Entwickler definierte Kennung für den Datensatz.
lang
Optional-
Ein gültiges Sprach-Tag entsprechend RFC 5646: Tags for Identifying Languages (also known as BCP 47).
mediaType
Optional-
Ein gültiger MIME-Typ.
recordType
-
Ein String, der den Typ der in
data
gespeicherten 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 intelligentes Poster, wie in der NDEF-SMARTPOSTER-Spezifikation definiert.
"text"
-
Text, wie in der NDEF-TEXT-Spezifikation definiert.
"unknown"
-
Der Typ des Datensatzes ist nicht bekannt.
"URL"
-
Eine URL, wie in der NDEF-URI-Spezifikation definiert.
options
Optional-
Ein Objekt mit den folgenden Eigenschaften:
overwrite
-
Ein boolescher Wert, der angibt, ob vorhandene Datensätze überschrieben werden sollen, falls solche vorhanden sind.
signal
Optional-
Ein
AbortSignal
, das es erlaubt, den aktuellen Schreibvorgang abzubrechen.
Rückgabewert
Ein Promise
, das entweder aufgelöst wird, wenn eine Nachricht auf den Tag geschrieben wurde, oder abgelehnt wird, wenn ein Hardware- oder Berechtigungsfehler auftritt.
Ausnahmen
Diese Methode wirft keine Ausnahmen, sondern lehnt das zurückgegebene Versprechen ab,
indem sie ein DOMException
übergibt, dessen name
einer der
folgenden ist:
AbortError
-
Der Scan-Vorgang wurde mit dem
AbortSignal
abgebrochen, das imoptions
-Argument übergeben wurde. NotAllowedError
-
Die Berechtigung für diesen Vorgang wurde abgelehnt oder
overwrite
istfalse
und es befinden sich bereits Datensätze auf dem Tag. NotSupportedError
-
Es gibt keinen NFC-Adapter, der mit Web NFC kompatibel ist, oder der vorhandene NFC-Adapter unterstützt das Senden von Nachrichten nicht, oder die Verbindung kann nicht hergestellt werden.
NotReadableError
-
Die UA darf nicht auf den zugrunde liegenden NFC-Adapter zugreifen (z. B. aufgrund von Benutzereinstellungen).
NetworkError
-
Übertragung fehlgeschlagen, nachdem sie bereits gestartet wurde (z. B. wurde der Tag vom Leser entfernt).
Beispiele
Einen Textstring schreiben
Das folgende Beispiel zeigt, wie ein String auf einen 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}.`);
});
Eine URL schreiben
Das folgende Beispiel zeigt, wie ein oben beschriebener Datensatz auf einen 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.");
}
Planen eines Schreibvorgangs mit Zeitüberschreitung
Es ist manchmal nützlich, ein Zeitlimit für einen Schreibvorgang festzulegen. Zum Beispiel bitten Sie den Benutzer, einen Tag zu berühren, aber es wird kein Tag innerhalb einer bestimmten Zeit gefunden, dann erfolgt eine Zeitüberschreitung.
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
Specification |
---|
Web NFC # dom-ndefreader-write |