Saltar al contenido
Idioma: ES

¿Qué puede escribir Web NFC y qué no?

Cualquier mensaje NDEF, desde texto y enlaces hasta datos MIME y tipos externos, formateando de paso una etiqueta virgen, y desde Chrome 100 un bloqueo permanente. Nada por debajo del NDEF: ni contraseña, ni página de configuración, ni comando en bruto. Y una escritura fallida solo declara que falló.

Lo que hace write()

write() prepara un mensaje y espera una etiqueta. En el artículo de Chrome sobre Web NFC, su promesa se resuelve una vez que alguien toca una etiqueta y el mensaje queda escrito, en las mismas condiciones que un escaneo: un gesto, el permiso, y NFC presente y encendido.

Una cadena simple se convierte en un registro de texto, en UTF-8 y en el idioma del documento salvo que el registro diga otra cosa. Cualquier otra cosa es un mensaje de registros: una URL, una URL absoluta, datos MIME, un cartel inteligente, un tipo externo como example.com:foo, o un registro vacío.

Eso cubre lo que lleva la mayoría de las etiquetas. Cubre también un Android Application Record, que el artículo escribe como el tipo externo android.com:pkg, con los límites que describe la página del registro de aplicación.

Etiquetas que ya contienen un mensaje

Por omisión, la escritura reemplaza lo que la etiqueta contenga. La especificación pone overwrite a verdadero salvo que se diga otra cosa; puesto a falso, la escritura lee antes la etiqueta y rechaza con NotAllowedError si encuentra registros NDEF.

Una etiqueta virgen se trata por ti. Cuando la etiqueta en alcance está sin formatear y se puede formatear para NDEF, la especificación la formatea y después escribe. El artículo añade que una etiqueta así se lee como un solo registro vacío, que es como una página reconoce una antes de escribir.

La especificación recomienda llamar a write() desde un evento reading, para que la página compruebe el contenido existente o el número de serie y escriba solo en la etiqueta que pretendía.

Bloquear desde una página

makeReadOnly() llegó en Chrome 100 para Android, y el artículo lo describe como un proceso de un solo sentido que no se puede revertir. Comprueba que existe con 'makeReadOnly' in NDEFReader.prototype antes de ofrecerlo.

Átalo a una acción aparte de la escritura, tomada después de comprobar el contenido en un segundo teléfono. Si conviene bloquear o no se decide en la página del bloqueo.

Lo que una página no puede hacer

Web NFC se para en el NDEF por diseño. El artículo enumera lo que queda fuera de su alcance: las operaciones de bajo nivel como ISO-DEP, NFC-A, NFC-B y NFC-F, el punto a punto, y la emulación de tarjeta host.

Eso descarta todo lo que un chip hace más allá de guardar un mensaje. Una página no puede poner ni usar una contraseña, escribir una página de configuración, activar un contador ni leer una firma, cosas todas que pasan por comandos en bruto.

Una escritura fallida dice además poco. La especificación rechaza con NetworkError cuando la transferencia falla, sin decir hasta dónde llegó, así que vuelve a leer la etiqueta antes de reintentar. El ejemplo de leer tras escribir del artículo, un write() seguido de un scan() corto, hace exactamente eso.

Preguntas frecuentes

¿Web NFC puede poner una contraseña a una etiqueta?

No. Las contraseñas se ponen con comandos del chip, y Web NFC se para en el NDEF: las operaciones de bajo nivel quedan fuera de su alcance.

¿Qué pasa si la etiqueta ya contiene un mensaje?

Por omisión se sobrescribe. Con overwrite puesto a falso, la escritura lee antes la etiqueta y rechaza si encuentra registros NDEF.

¿Puede una página dejar una etiqueta en solo lectura?

Desde Chrome 100 para Android, con makeReadOnly. El bloqueo es permanente, así que va después de comprobar el contenido.

¿Por qué mi escritura falló con NetworkError?

La especificación lo levanta cuando la transferencia a la etiqueta falla. Vuelve a leer la etiqueta antes de reintentar, ya que la página no puede saber hasta dónde llegó la escritura.