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 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 auftritt. Diese Methode löst eine Berechtigungsanfrage aus, wenn die Berechtigung "nfc" nicht zuvor erteilt wurde.

Syntax

js
write(message)
write(message, options)

Parameter

message

Die zu schreibende Nachricht, entweder ein String, ein ArrayBuffer, ein TypedArray, ein DataView oder ein Array von Datensätzen. Ein Datensatz hat die folgenden Mitglieder:

data Optional

Enthält die zu übertragenden Daten, ein String, ein ArrayBuffer, ein TypedArray, ein DataView 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 gemäß RFC 5646: Tags for Identifying Languages (auch bekannt als BCP 47).

mediaType Optional

Ein gültiger MIME-Typ.

recordType

Ein String, der den Typ der im data gespeicherten Daten angibt. Es 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 unbekannt.

"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 existieren.

signal Optional

Ein AbortSignal, der es ermöglicht, den aktuellen Schreibvorgang abzubrechen.

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 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

Der Scanvorgang wurde mit dem in den options Argument übergebenen AbortSignal abgebrochen.

NotAllowedError

Die Berechtigung für diesen Vorgang wurde zurückgewiesen oder overwrite ist false und es sind bereits Datensätze auf dem Tag vorhanden.

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 Benutzeragent darf nicht auf den zugrunde liegenden NFC-Adapter zugreifen (z.B. aufgrund von Benutzereinstellungen).

NetworkError

Der Transfer ist fehlgeschlagen, nachdem er bereits begonnen hat (z.B. das Tag wurde vom Leser entfernt).

Beispiele

Einen Textstring schreiben

Das folgende Beispiel zeigt, wie man einen String auf ein NFC-Tag schreibt und auftretende Fehler verarbeitet.

js
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 oben beschriebenes Datensatzobjekt auf ein NFC-Tag schreibt und auftretende Fehler verarbeitet.

js
const ndef = new NDEFReader();
try {
  await ndef.write({
    records: [{ recordType: "url", data: "http://example.com/" }],
  });
} catch {
  console.log("Write failed :-( try again.");
}

Ein Schreiben mit einem Timeout planen

Es ist manchmal nützlich, ein Zeitlimit für einen Schreibvorgang festzulegen. Zum Beispiel fragen Sie den Benutzer, ein Tag zu berühren, aber innerhalb einer gewissen Zeit wird kein Tag gefunden, dann läuft die Zeit ab.

js
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("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 API
# dom-ndefreader-write

Browser-Kompatibilität

BCD tables only load in the browser