Vai al contenuto
Lingua: IT

Che cosa può scrivere Web NFC, e che cosa no?

Qualsiasi messaggio NDEF, dal testo e dai collegamenti ai dati MIME e ai tipi esterni, formattando per strada un tag vergine, e da Chrome 100 un blocco permanente. Niente sotto il NDEF: nessuna password, nessuna pagina di configurazione, nessun comando grezzo. E una scrittura fallita segnala solo che è fallita, quindi la pagina rilegge il tag prima di riprovare.

Che cosa fa write()

write() prepara un messaggio e aspetta un tag. Nell'articolo di Chrome su Web NFC, la sua promessa si risolve una volta che si avvicina un tag e il messaggio è scritto, alle stesse condizioni di una lettura: un gesto di chi usa il telefono, il permesso, e l'NFC presente e acceso.

Una semplice stringa diventa un record di testo, in UTF-8 e nella lingua del documento a meno che il record non dica altro. Tutto il resto è un messaggio di record: un URL, un URL assoluto, dati MIME, uno smart poster, un tipo esterno come example.com:foo, oppure un record vuoto.

Questo copre quello che porta la maggior parte dei tag. Copre anche un record applicativo Android, che l'articolo scrive come il tipo esterno android.com:pkg, con i limiti descritti nella pagina del record applicativo.

I tag che portano già un messaggio

Per impostazione predefinita, la scrittura sostituisce quello che il tag porta. La specifica mette overwrite a vero salvo indicazione contraria; messo a falso, la scrittura legge prima il tag e rifiuta con NotAllowedError se ci trova record NDEF.

Un tag vergine è trattato per te. Quando il tag a portata non è formattato e si può formattare per il NDEF, la specifica lo formatta, poi scrive. L'articolo aggiunge che un tag del genere si legge come un record vuoto solo, ed è così che una pagina può riconoscerlo prima di scrivere.

La specifica raccomanda di chiamare write() da un evento reading, così che la pagina verifichi il contenuto esistente o il numero di serie e scriva solo sul tag su cui voleva scrivere.

Bloccare da una pagina

makeReadOnly() è arrivato in Chrome 100 su Android, e l'articolo lo descrive come un processo a senso unico su cui non si torna indietro. Verificane la presenza con 'makeReadOnly' in NDEFReader.prototype prima di offrirlo.

Legalo a un'azione separata dalla scrittura, presa dopo che il contenuto è stato verificato su un secondo telefono. Se bloccare sia il caso si decide nella pagina del blocco.

Quello che una pagina non può fare

Web NFC si ferma al NDEF di proposito. L'articolo elenca quello che resta fuori: le operazioni di basso livello come ISO-DEP, NFC-A, NFC-B e NFC-F, il punto a punto, e Host Card Emulation.

Questo esclude tutto quello che un chip fa oltre a conservare un messaggio. Una pagina non può mettere né usare una password, scrivere una pagina di configurazione, accendere un contatore o leggere una firma, cose che passano tutte per comandi grezzi.

Anche una scrittura fallita dice poco. La specifica rifiuta con NetworkError quando il trasferimento fallisce, senza dire quanto lontano sia arrivato, quindi rileggi il tag prima di riprovare. L'esempio di lettura dopo scrittura dell'articolo, una write() seguita da una breve scan(), fa esattamente questo.

Domande frequenti

Web NFC può mettere una password su un tag?

No. Le password si mettono con comandi del chip, e Web NFC si ferma al NDEF: le operazioni di basso livello sono fuori dal suo perimetro.

Cosa succede se il tag porta già un messaggio?

Per impostazione predefinita viene sostituito. Con overwrite a falso, la scrittura legge prima il tag e rifiuta se ci trova record NDEF.

Una pagina può mettere un tag in sola lettura?

Da Chrome 100 su Android, con makeReadOnly. Il blocco è permanente, quindi viene dopo che il contenuto è stato verificato.

Perché la mia scrittura è fallita con NetworkError?

La specifica lo solleva quando il trasferimento verso il tag fallisce. Rileggi il tag prima di riprovare, dato che la pagina non sa dire quanto lontano sia arrivata la scrittura.