Zum Inhalt springen
Sprache: DE

Kann eine Webseite einen NFC-Tag lesen?

Ja, in Chrome unter Android, über Web NFC. Die Seite muss über HTTPS in einem Rahmen der obersten Ebene ausgeliefert werden, ihren ersten Suchlauf aus einer Geste der Besucherin oder des Besuchers starten und deren Berechtigung haben. Sie erhält dann jede NDEF-Nachricht samt der Seriennummer des Tags. Kein anderer Browser liefert die Schnittstelle aus, und nichts davon erreicht ein iPhone.

Wo es arbeitet

Web NFC kam mit Chrome 89 für Android, so der Artikel von Chrome zu Web NFC. Der Eintrag im Plattformstatus von Chrome führt keine Unterstützung auf dem Rechner, unter iOS oder in der WebView von Android auf, sodass eine Seite im eingebetteten Browser einer Anwendung sie ebenfalls nicht bekommt.

Die anderen Browser-Engines haben Nein gesagt. Die veröffentlichte Haltung von WebKit lehnt die Schnittstelle ab und nennt Datenschutz, Sicherheit und Geräteunabhängigkeit, und die Haltung von Mozilla ist ablehnend. Die Spezifikation entsteht in einer Community Group des W3C und ist nicht als Empfehlung des W3C veröffentlicht.

Eine Seite, die Tags liest, bedient also Besucher unter Android, die Chrome benutzen, und sonst niemanden. Das passt zu Werkzeugen für das eigene Personal auf Telefonen, über die ein Vorhaben bestimmt, weit besser als zu allem, was die Allgemeinheit öffnen wird.

Was vor einem Suchlauf geschehen muss

Die Seite wird über HTTPS ausgeliefert, in einem Rahmen der obersten Ebene statt in einem iframe. Der erste Aufruf von scan() erfolgt als Antwort auf eine Geste, etwa einen Druck auf eine Schaltfläche, und dann fragt Chrome nach der Berechtigung nfc. Ist sie einmal erteilt, prüft das Beispiel des Artikels sie über die Schnittstelle der Berechtigungen und beginnt zu suchen, ohne auf eine Geste zu warten.

Das Telefon braucht außerdem NFC-Hardware, eingeschaltet. Eine Prüfung auf die Schnittstelle sagt das nicht: 'NDEFReader' in window sagt, dass der Browser Web NFC unterstützt, und das Promise wird erst später abgelehnt, wenn die Hardware fehlt.

Die Spezifikation benennt die Ablehnungen. NotAllowedError heißt, dass die Berechtigung verweigert wurde, NotSupportedError, dass es keinen NFC-Adapter gibt, und NotReadableError, dass der Browser ihn nicht benutzen darf, etwa wegen einer Einstellung.

Was die Seite erhält

Jeder Tag bringt ein Ereignis reading mit zwei Dingen: die Nachricht, und serialNumber, die Kennung, die der Tag zur Antikollision benutzt, oder eine leere Zeichenfolge, wenn keine verfügbar ist. Diese Kennung ist kein Geheimnis, wie die Seite zur UID erklärt.

Die Nachricht trägt Datensätze, die die Seite selbst dekodiert, nach recordType: Text, URL, absolute URL, MIME, intelligentes Plakat, externer Typ, leer, unbekannt und lokale Typen. Jeder Datensatz stellt seine Nutzlast als DataView bereit, und das Dekodieren des Textes bleibt der Seite überlassen.

Ein Tag, den der Browser nicht als NDEF lesen kann, löst stattdessen readingerror aus. Wer dieses Ereignis nicht behandelt, sieht einen nicht unterstützten Tag so, als wäre nichts geschehen.

Was es beendet

Die Seite muss sichtbar bleiben. Chrome hält die NFC-Vorgänge an, solange die Seite verborgen ist, und nimmt sie wieder auf, wenn sie zurückkommt, und es sperrt den Funk, wenn der Bildschirm aus ist oder das Telefon gesperrt.

Ein Tag, der vor dem Beginn des Suchlaufs angetippt wird, geht an Android und nicht an die Seite. Der Artikel sagt es unter seinen Hinweisen: Android behandelt Tags auf der Ebene des Betriebssystems, bevor Web NFC arbeitsbereit ist, sodass ein Tag mit einem Link die eigene Behandlung dieses Links durch das Telefon auslösen kann.

Und das Suchen endet mit der Seite. Es gibt kein Lesen im Hintergrund, eine Seite kann also nicht in einer Tasche auf Tags warten, wie es eine im Manifest eingetragene Anwendung kann.

Häufige Fragen

Arbeitet Web NFC auf dem iPhone?

Nein. Der Eintrag im Plattformstatus von Chrome führt keine Unterstützung unter iOS auf, und die veröffentlichte Haltung von WebKit lehnt die Schnittstelle aus Gründen des Datenschutzes, der Sicherheit und der Geräteunabhängigkeit ab.

Kann eine Seite Tags im Hintergrund lesen?

Nein. Chrome hält die NFC-Vorgänge an, solange die Seite verborgen ist, und sperrt den Funk, wenn der Bildschirm aus ist oder das Telefon gesperrt.

Kann Web NFC die UID des Tags lesen?

Das Ereignis reading stellt serialNumber bereit, die Kennung, die der Tag zur Antikollision benutzt, oder eine leere Zeichenfolge, wenn keine verfügbar ist. Sie unterscheidet einen Tag und beweist nichts über ihn.

Arbeitet es in der WebView einer Android-Anwendung?

Nein. Der Eintrag im Plattformstatus von Chrome führt Web NFC nur für Chrome unter Android auf, ohne Unterstützung in der WebView, eine Anwendung mit NFC-Bedarf ruft also die Schnittstelle der Plattform auf.