Was kann Web NFC schreiben, und was nicht?
Jede NDEF-Nachricht, von Text und Links bis zu MIME-Daten und externen Typen, wobei ein leerer Tag unterwegs formatiert wird, und ab Chrome 100 ein dauerhaftes Sperren. Nichts unterhalb von NDEF: kein Passwort, keine Konfigurationsseite, kein roher Befehl. Und ein misslungener Schreibvorgang meldet nur, dass er misslang, die Seite liest den Tag also vor dem nächsten Versuch zurück.
Was write() tut
write() bereitet eine Nachricht vor und wartet auf einen Tag. Im Artikel von Chrome zu Web NFC wird sein Promise erfüllt, sobald ein Tag angetippt und die Nachricht geschrieben ist, unter denselben Bedingungen wie ein Suchlauf: eine Geste, die Berechtigung, und NFC vorhanden und eingeschaltet.
Eine bloße Zeichenfolge wird zu einem Textdatensatz, in UTF-8 und in der Sprache des Dokuments, sofern der Datensatz nichts anderes sagt. Alles andere ist eine Nachricht aus Datensätzen: eine URL, eine absolute URL, MIME-Daten, ein intelligentes Plakat, ein externer Typ wie example.com:foo, oder ein leerer Datensatz.
Das deckt ab, was die meisten Tags tragen. Es deckt auch einen Android Application Record ab, den der Artikel als den externen Typ android.com:pkg schreibt, mit den Grenzen, die die Seite zum Application Record beschreibt.
Tags, die schon eine Nachricht tragen
Voreingestellt ersetzt der Schreibvorgang, was der Tag trägt. Die Spezifikation setzt overwrite auf wahr, sofern nichts anderes gesagt wird; auf falsch gesetzt liest der Schreibvorgang den Tag zuerst und lehnt mit NotAllowedError ab, wenn er NDEF-Datensätze findet.
Ein leerer Tag wird Ihnen abgenommen. Ist der Tag in Reichweite unformatiert und lässt er sich für NDEF formatieren, formatiert die Spezifikation ihn und schreibt dann. Der Artikel fügt hinzu, dass ein solcher Tag sich als ein einziger leerer Datensatz liest, woran eine Seite ihn vor dem Schreiben erkennen kann.
Die Spezifikation empfiehlt, write() aus einem Ereignis reading heraus aufzurufen, damit die Seite den vorhandenen Inhalt oder die Seriennummer prüft und nur den Tag beschreibt, den sie beschreiben wollte.
Sperren aus einer Seite heraus
makeReadOnly() kam mit Chrome 100 unter Android, und der Artikel beschreibt es als einen einseitigen Vorgang, der sich nicht umkehren lässt. Prüfen Sie mit 'makeReadOnly' in NDEFReader.prototype darauf, bevor Sie es anbieten.
Binden Sie es an eine vom Schreiben getrennte Handlung, ausgeführt, nachdem der Inhalt auf einem zweiten Telefon geprüft wurde. Ob überhaupt zu sperren ist, entscheidet die Seite zum Sperren.
Was eine Seite nicht kann
Web NFC hört bei NDEF auf, und zwar mit Absicht. Der Artikel führt auf, was außerhalb seines Rahmens liegt: Vorgänge auf unterer Ebene wie ISO-DEP, NFC-A, NFC-B und NFC-F, Punkt-zu-Punkt-Modus, und Host Card Emulation.
Das schließt alles aus, was ein Chip über das Ablegen einer Nachricht hinaus tut. Eine Seite kann kein Passwort setzen oder benutzen, keine Konfigurationsseite schreiben, keinen Zähler einschalten und keine Signatur lesen, was alles über rohe Befehle geht.
Ein misslungener Schreibvorgang sagt ebenfalls wenig. Die Spezifikation lehnt mit NetworkError ab, wenn die Übertragung scheitert, ohne zu sagen, wie weit sie kam, lesen Sie den Tag also vor dem nächsten Versuch zurück. Das Beispiel des Artikels, das nach dem Schreiben zurückliest, ein write() gefolgt von einem kurzen scan(), tut genau das.
Häufige Fragen
Kann Web NFC ein Passwort auf einem Tag setzen?
Nein. Passwörter werden mit Befehlen an den Chip gesetzt, und Web NFC hört bei NDEF auf: Vorgänge auf unterer Ebene liegen außerhalb seines Rahmens.
Was geschieht, wenn der Tag schon eine Nachricht trägt?
Voreingestellt wird sie überschrieben. Steht overwrite auf falsch, liest der Schreibvorgang den Tag zuerst und lehnt ab, wenn er NDEF-Datensätze findet.
Kann eine Seite einen Tag nur lesbar machen?
Ab Chrome 100 unter Android, mit makeReadOnly. Das Sperren ist dauerhaft, es gehört also hinter die Prüfung des Inhalts.
Warum ist mein Schreibvorgang mit NetworkError misslungen?
Die Spezifikation löst ihn aus, wenn die Übertragung zum Tag scheitert. Lesen Sie den Tag vor dem nächsten Versuch zurück, da die Seite nicht sagen kann, wie weit der Schreibvorgang kam.