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 des NDEFReader-Interfaces 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 abgelehnt wird, wenn ein Hardware- oder Berechtigungsfehler auftritt. Diese Methode löst eine Berechtigungsaufforderung aus, wenn die "nfc"-Berechtigung nicht vorher 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:dataOptional-
Enthält die zu übertragenden Daten, ein String, ein
ArrayBuffer, einTypedArray, einDataView, oder ein Array von verschachtelten Datensätzen. encodingOptional-
Ein String, der die Codierung des Datensatzes angibt.
idOptional-
Eine vom Entwickler definierte Kennung für den Datensatz.
langOptional-
Ein gültiges BCP 47 Sprach-Tag.
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 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, der es ermöglicht, die aktuelle Schreiboperation 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; stattdessen lehnt sie das zurückgegebene Promise ab und übergibt ein DOMException, dessen name einer der folgenden ist:
AbortError-
Die Scan-Operation wurde mit dem
AbortSignalabgebrochen, das imoptions-Argument übergeben wurde. NotAllowedError-
Die Berechtigung für diese Operation wurde abgelehnt, oder
overwriteistfalseund es gibt bereits Datensätze auf dem Tag. NotSupportedError-
Es gibt keinen mit Web NFC kompatiblen NFC-Adapter, oder der vorhandene NFC-Adapter unterstützt das Senden von Nachrichten nicht, oder die Verbindung kann nicht hergestellt werden.
NotReadableError-
Der UA darf nicht auf den zugrunde liegenden NFC-Adapter zugreifen (z.B. aufgrund von Benutzervorgaben).
NetworkError-
Die Übertragung ist fehlgeschlagen, nachdem sie bereits gestartet wurde (z.B. wurde der Tag aus dem Leser entfernt).
Beispiele
>Eine Textzeichenkette schreiben
Das folgende Beispiel zeigt, wie man eine Zeichenkette auf einen NFC-Tag schreibt und auftretende Fehler verarbeitet.
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 man ein Datensatzobjekt (wie oben beschrieben) auf einen NFC-Tag schreibt und auftretende Fehler verarbeitet.
const ndef = new NDEFReader();
try {
await ndef.write({
records: [{ recordType: "url", data: "http://example.com/" }],
});
} catch {
console.log("Write failed :-( try again.");
}
Ein Schreibvorgang mit Timeout planen
Es ist manchmal nützlich, ein Zeitlimit für einen Schreibvorgang festzulegen. Zum Beispiel bitten Sie den Benutzer, einen Tag zu berühren, aber innerhalb einer bestimmten Zeit wird 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
| Specification |
|---|
| Web NFC> # dom-ndefreader-write> |
Browser-Kompatibilität
Loading…