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

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

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

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

NotAllowedError

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

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 Datensatzobjekt (wie oben beschrieben) auf einen 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 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.

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

Specification
Web NFC
# dom-ndefreader-write

Browser-Kompatibilität