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

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 Kodierung des Datensatzes angibt.

id Optional

Ein vom Entwickler definierter Identifikator für den Datensatz.

lang Optional

Ein gültiger BCP 47 Sprach-Tag.

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

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, 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 AbortSignal abgebrochen, das im options-Argument übergeben wurde.

NotAllowedError

Die Berechtigung für diesen Vorgang wurde abgelehnt oder overwrite ist false, 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.

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

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

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