Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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

js
write(message)
write(message, options)

Parameter

message

Die zu schreibende Nachricht: ein String, ein ArrayBuffer, ein TypedArray, eine DataView oder ein Array von Datensätzen. Ein Datensatz hat folgende Eigenschaften:

data Optional

Enthält die zu übertragenden Daten: einen String, ein ArrayBuffer, ein TypedArray, eine DataView oder ein Array verschachtelter Datensätze.

encoding Optional

Ein String, der die Kodierung des Datensatzes angibt.

id Optional

Eine vom Entwickler festgelegte Kennung für den Datensatz.

lang Optional

Ein gültiges BCP-47-Sprachtag.

mediaType Optional

Ein gültiger MIME-Typ.

recordType

Ein String, der den Typ der in data gespeicherten 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.

options Optional

Ein Objekt mit folgenden Eigenschaften:

overwrite

Ein boolescher Wert, der angibt, ob vorhandene Datensätze überschrieben werden sollen.

signal Optional

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:

AbortError DOMException

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

NotAllowedError DOMException

Die Berechtigung für diesen Vorgang wurde verweigert, oder overwrite ist false und auf dem Tag befinden sich bereits Datensätze.

NotSupportedError DOMException

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.

NotReadableError DOMException

Der User-Agent darf nicht auf den zugrunde liegenden NFC-Adapter zugreifen (z. B. aufgrund einer Benutzereinstellung).

NetworkError DOMException

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.

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 Sie ein oben beschriebenes Datensatzobjekt auf einen NFC-Tag schreiben und dabei auftretende Fehler behandeln.

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

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

Browser-Kompatibilität