Huella Canvas: exportaciones vacías y errores
Distingue el resultado data:, del formato alternativo PNG y de SecurityError al interpretar una prueba de huella Canvas.
BotBrowser Team
Quieres la documentación estructurada de Huella digital?
Este artículo forma parte de la biblioteca editorial. Para pasos de configuración, material de referencia y actualizaciones continuas, entra en la sección de docs.
Una prueba de huella Canvas puede no producir una imagen antes de disponer de píxeles que comparar. BotBrowser documenta controles de ruido Canvas y --bot-noise-seed para flujos con resultados consistentes. Esa configuración no garantiza que la exportación haya funcionado, que se haya usado el codificador solicitado ni que se cumpla la condición origin-clean. Por tanto, un resumen ausente necesita un estado de exportación, no una explicación inmediata sobre la identidad del navegador.
TL;DR
data:,es un indicador de resultado vacío, no un PNG vacío. Una dimensión nula y un fallo de serialización pueden devolver el mismo valor.- MDN también documenta
data:,cuando las dimensiones superan el límite Canvas de la implementación. La cadena no identifica la causa. - Un mapa de bits que no es origin-clean produce un
SecurityErrorsíncrono; esa comprobación precede a la de dimensiones nulas. - Un tipo de imagen solicitado pero no admitido puede usar PNG como alternativa y exportarse correctamente. Obtener PNG no demuestra que funcionara el codificador solicitado.
toBlob()expone otro resultado: devuelve inmediatamenteundefined, mientras su función de retorno recibe unBlobonull. Su excepción de seguridad sigue siendo síncrona.
Contenido
- Interpretar el resultado de exportación
- Dimensiones, limpieza y orden de excepciones
- Formatos solicitados y trabajo de serialización
- Casos de comparación para informes de huella
- Registro diagnóstico mínimo
- Preguntas frecuentes sobre estados de exportación Canvas
- Conclusión práctica
El diagrama representa resultados de exportación documentados. Es una ayuda de decisión derivada de las fuentes, no una ejecución capturada ni una puntuación de un detector.
Interpretar el resultado de exportación
El flujo habitual de huella Canvas separa dibujo, lectura, resumen y comparación posterior. Antes de interpretar una comparación de resúmenes como una comparación de imágenes, hay que clasificar el fallo de exportación. Si un comprobador sustituye cualquier excepción capturada o resultado vacío por un único valor falso, su salida conserva menos información que la API. Una vez descartados, no puede recuperar el nombre de la excepción, las dimensiones del mapa de bits ni el formato solicitado.
El estándar HTML define toDataURL() como una operación de serialización del mapa de bits Canvas. Normalmente devuelve una URL de datos con la imagen codificada, pero la cadena exacta data:, también es un resultado especificado. Esa URL mínima representa un recurso de texto vacío. No contiene una firma PNG ni demuestra que se codificara una imagen no vacía. Llamarla imagen en blanco confunde la ausencia de imagen codificada con una imagen válida cuyos píxeles son transparentes.
| Entrada o fase | Resultado de toDataURL() | Resultado de toBlob() | Qué demuestra |
|---|---|---|---|
| El mapa de bits no es origin-clean | SecurityError síncrono | SecurityError síncrono | Falló la condición de seguridad al exportar |
| Una dimensión del mapa de bits es cero | data:, | La función de retorno recibe null | No se serializó una imagen por esa ruta |
| La serialización no devuelve archivo | data:, | La función de retorno recibe null | El codificador no proporcionó un archivo de imagen |
| Tipo solicitado no admitido, codificación correcta | URL de datos PNG | Blob PNG | La codificación alternativa funcionó |
| Tipo solicitado admitido, codificación correcta | URL de datos de imagen | Blob de imagen | Se produjo una representación codificada |
MDN añade un caso de implementación: toDataURL() devuelve data:, cuando una dimensión supera el tamaño Canvas máximo. Ese máximo no es una constante portátil. Un registro que solo conserva el indicador no distingue ese caso de una dimensión nula o de un serializador fallido. La siguiente evidencia útil son las dimensiones reales del mapa de bits y la fase de exportación, no un dispositivo gráfico supuesto.
El análisis del informe Canvas de BrowserLeaks sigue una ruta concreta de PNG y resumen. Su resultado visible de compatibilidad no es un informe completo de excepciones. Los estados documentados de exportación distinguen resultados que ese indicador puede agrupar; no demuestran que BrowserLeaks exponga cada uno ni que conserve la causa original.
Dimensiones, limpieza y orden de excepciones
El mapa de bits Canvas y la caja de visualización CSS del elemento son objetos distintos. Los atributos width y height controlan las dimensiones del mapa de bits; CSS puede escalar su presentación. Un rectángulo grande en una captura no demuestra que el mapa codificado sea grande. A la inversa, un elemento pequeño puede serializar muchos más píxeles de los que su caja visible sugiere. Una comparación basada solo en capturas puede emparejar entradas de mapa de bits distintas como si fueran la misma configuración de comparación.
Una dimensión nula tampoco equivale a un dibujo que no pinta nada. Un mapa de bits no nulo puede contener píxeles transparentes y serializarse como imagen. data:, corresponde a la ausencia de píxeles en una dimensión o a no obtener un archivo serializado; no determina si el dibujo tiene contenido visual interesante. Esa distinción evita agrupar incorrectamente un Canvas transparente con otro de tamaño nulo en un informe de compatibilidad.
El indicador origin-clean es otra entrada independiente. Los dos algoritmos de exportación lo comprueban primero. Si es falso, lanzan SecurityError antes de los pasos posteriores. El orden importa cuando el mapa de bits tiene también otra propiedad problemática: una excepción de seguridad capturada no puede reclasificarse como el indicador de dimensión nula. Una aplicación que solo registra «Canvas no disponible» pierde qué operación se detuvo.
MDN describe la condición de seguridad mediante un mapa de bits cuyo contenido procede o puede proceder de otro origen. Eso no diagnostica una petición de imagen concreta. La excepción no revela todo el historial de dibujo, el recurso que afectó al mapa ni las cabeceras de respuesta presentes. Los registros de una aplicación propia pueden investigar esas entradas, pero un panel público de huella que muestra una etiqueta de error no puede deducirlas de ella.
Cambiar la presentación del elemento no demuestra que su mapa de bits haya pasado a ser origin-clean. Las dimensiones CSS y el indicador de seguridad pertenecen a partes distintas del modelo. Del mismo modo, una URL de imagen válida en un documento no prueba por sí sola que esa imagen pueda incluirse en una salida Canvas legible. Mostrar un recurso y exportar sus píxeles son permisos y operaciones diferentes. El registro debe conservar la excepción de exportación en lugar de asumir que mostrar la imagen garantiza poder exportarla.
Los límites de dimensiones requieren la misma separación. Un navegador puede exponer las interfaces Canvas aunque no pueda exportar un mapa de bits concreto. Presencia de la función, creación del contexto, dibujo y serialización son comprobaciones distintas. Fallar en la última no demuestra que faltaran las interfaces anteriores. Los algoritmos citados no proporcionan una dimensión máxima universal: un informe multiplataforma debe conservar las dimensiones solicitadas sin convertir el límite de un entorno en una propiedad normativa de todo navegador.
Formatos solicitados y trabajo de serialización
El tipo MIME solicitado es una entrada, no una garantía sobre la representación producida. Las reglas HTML exigen compatibilidad con PNG y definen la alternativa PNG cuando no se admite el tipo solicitado. También consideran no admitido un tipo que contiene parámetros. Quien espera JPEG no puede concluir que se usó JPEG solo porque el método devolvió una cadena no vacía. El tipo de medio de la URL de datos o el tipo del Blob resultante constituyen la evidencia de representación.
Esto importa antes de comparar valores codificados. Dos exportaciones pueden representar un dibujo equivalente en formatos distintos y, por tanto, con secuencias de bytes diferentes. Incluso manteniendo el formato, un resumen de bytes codificados describe esos bytes; no demuestra que dos decodificadores mostrarían píxeles diferentes. El flujo general de huella Canvas incluye dibujo y lectura; comparar archivos codificados añade decisiones de serialización que no deben atribuirse silenciosamente a la superficie gráfica.
El argumento opcional quality se aplica a formatos con compresión con pérdida. MDN describe valores numéricos de 0 a 1; si se omite o queda fuera del intervalo, el agente de usuario utiliza su calidad predeterminada. Un valor numérico fuera del intervalo no define una rama independiente de error de calidad, aunque las dimensiones, la limpieza de origen o la serialización puedan fallar. Un formato que no usa ese ajuste no adquiere uno porque se suministre el argumento. Solicitar un valor no demuestra que PNG lo utilizara ni que todas las implementaciones configuraran igual sus codificadores. Hay que conservar tipo y calidad solicitados por separado del tipo devuelto para no confundir una entrada ignorada o una alternativa con un cambio de renderizado.
Los metadatos de resolución añaden otra frontera. La documentación describe metadatos de 96dpi para formatos que permiten codificar esa información. Son metadatos del archivo, no una medición de la pantalla física ni del tamaño CSS del elemento. Un valor de la imagen serializada no debe reutilizarse como observación de densidad de pantalla. Separar dimensiones del mapa, disposición CSS y metadatos codificados permite comparar la entrada que realmente cambió.
toDataURL() crea una cadena en memoria para toda la imagen. MDN advierte de consecuencias de rendimiento con imágenes grandes y de posibles límites de longitud de URL al asignarla a src de una imagen. La advertencia no demuestra que una exportación o su asignación posterior hayan fallado. Un informe de imagen ausente tras asignar una URL muy grande debe distinguir la exportación de la operación consumidora posterior: no mostrar la URL no prueba que la serialización devolviera data:,.
toBlob() evita esa interfaz de cadena de URL de datos, pero no garantiza éxito universal ni consumo de memoria nulo. El estándar sigue describiendo una copia del mapa de bits y su serialización. Su retorno inmediato es undefined; la imagen llega mediante una función de retorno. Registrar ese valor inmediato como «sin imagen» interpreta mal el contrato aunque la función reciba después un Blob válido. El null recibido indica ausencia de ese resultado de imagen, mientras que un SecurityError síncrono ocurre antes y corresponde a otra ruta.
Casos de comparación para informes de huella
Dos registros contienen data:,, pero sus dimensiones difieren. Uno puede tener una dimensión nula; el otro puede solicitar un tamaño no admitido o alcanzar un fallo de serialización. La igualdad de cadenas solo demuestra igualdad del indicador, no de una huella renderizada. Hay que conservar width y height antes de decidir si comparten causa. Sin esas entradas, corresponde clasificar una exportación vacía de causa sin resolver, no una firma de dispositivo coincidente.
Una exportación produce PNG después de solicitar JPEG. El archivo correcto demuestra que la ruta alternativa produjo PNG. No demuestra que el codificador JPEG procesara la solicitud. Se deben comparar tipos solicitados y reales antes de agrupar el registro con resultados JPEG. Un resumen comparado entre representaciones responde a una pregunta de igualdad de archivos y no identifica por sí solo una diferencia en el dibujo Canvas original.
Un comprobador pasa de un resumen a una etiqueta genérica falsa. El cambio visible puede ser posterior a un fallo de exportación, pero la etiqueta no identifica la rama. El código del comprobador o un registro de la aplicación propia debe establecer si se capturó una excepción, se rechazó el indicador o falló una fase posterior de imagen. El análisis publicado de BrowserLeaks separa salida visible y diagnóstico completo; esa frontera impide atribuir sin evidencia una rama desconocida a los ajustes de privacidad.
Un registro de toBlob() contiene undefined y la función de retorno posterior contiene un archivo. Ambas observaciones son compatibles. El valor inmediato no es el resultado asíncrono de imagen. Hay que comparar resultados de funciones de retorno entre sí, en lugar de mezclar el retorno inmediato de una API con la imagen final de otra. La fase debe acompañar al nombre del método en una incidencia de compatibilidad, especialmente al combinar registros de distintas implementaciones de exportación.
Un cambio CSS parece reparar la página, pero las dimensiones exportadas no cambian. La presentación y el mapa de bits responden a preguntas distintas. Un ajuste de disposición puede mejorar la presentación sin alterar el mapa que recibe el serializador. Si la consulta trata el elemento visible, deben conservarse ambas dimensiones; si trata la serialización, bastan las del mapa. Así no se describe una reparación visual como un cambio de entrada de huella cuando esa entrada no cambió.
Una exportación no origin-clean lanza una excepción antes de devolver un resultado vacío. El orden de la excepción forma parte de la evidencia. Un envoltorio que la convierte en falso debe registrar esa conversión: un lector posterior no puede reconstruir la excepción síncrona a partir de falso. No hacen falta píxeles crudos para conservar la distinción: método, fase y nombre de excepción bastan para separarla de la ruta del indicador especificado.
Registro diagnóstico mínimo
Un registro útil identifica method, width y height del mapa de bits, requestedType, actualType, outcome y phase. En un fallo síncrono puede conservar exceptionName en lugar de los datos de imagen. Para toBlob() debe distinguir llamada inmediata y finalización de la función de retorno. Estos campos describen operación y resultado sin retener la URL de datos completa, la imagen codificada ni el resumen. Un esquema define campos que una aplicación puede conservar; solo un registro real establece qué rama se ejecutó.
| Campo | Conservar | No deducir |
|---|---|---|
width, height | Dimensiones del mapa suministradas a exportación | Dimensiones de la pantalla física |
requestedType, actualType | Representación solicitada y producida | Compatibilidad con todo codificador solicitado |
phase | Llamada, excepción síncrona o finalización de la función de retorno | Que undefined inmediato sea una imagen fallida |
outcome | Imagen, indicador, null de retorno o excepción | Identidad del dispositivo o veredicto de manipulación |
exceptionName | Clase de excepción observada cuando existe | Recurso responsable de otro origen |
Si el informe solo contiene un falso capturado, hay que conservar esa limitación en vez de completar exceptionName por expectativa. Un detalle no disponible difiere de una excepción observada. Lo mismo vale para las dimensiones: no se deben sustituir las del mapa ausentes por una caja CSS medida después. Los campos derivados pueden ser útiles, pero necesitan etiquetas propias para que el registro no parezca más preciso que su evidencia.
La documentación Canvas de BotBrowser describe --bot-noise-canvas y --bot-noise-seed. Esos controles pertenecen a la consistencia de salida de píxeles. No establecen qué representación produjo una exportación concreta ni si su mapa cumplió la condición de seguridad. La configuración de lanzamiento debe mantenerse separada del estado de exportación; unos ajustes idénticos no prueban que todas las entradas de una prueba de huella posterior fueran iguales.
El registro mínimo también puede omitir URL completas de recursos, identificadores de cuenta y contenido de imágenes. Una revisión del código o etiqueta de compilación suele bastar para identificar la ruta de exportación prevista. Cuando un recurso concreto sea necesario para una investigación propia, corresponde aplicar la política de retención de la aplicación en vez de publicar su URL o sus píxeles. El valor diagnóstico procede de conservar la rama, no de acumular una firma de imagen reutilizable.
Preguntas frecuentes sobre estados de exportación Canvas
¿Es data:, un PNG válido sin dibujo visible?
No. El estándar describe un recurso de texto vacío. Un mapa no nulo con píxeles transparentes es otro estado y puede serializarse como imagen. El indicador no contiene un PNG codificado que comparar.
¿Demuestra data:, que se bloqueó la huella Canvas?
No. Las dimensiones nulas y los fallos de serialización pueden producirlo; MDN documenta también el límite de tamaño de implementación. La cadena sola no establece un ajuste de privacidad ni cómo interpretó el fallo un detector.
¿Puede un formato no admitido devolver una imagen correcta?
Sí. La alternativa PNG puede funcionar cuando el tipo solicitado no está admitido. Hay que conservar la representación devuelta, sin tratar cualquier imagen no vacía como confirmación del formato solicitado.
¿Identifica SecurityError la imagen que causó el problema?
No. Establece que el mapa no era origin-clean al exportarse. No incluye todo el historial de dibujo ni establece el recurso responsable y su configuración de respuesta.
¿Es un error el undefined inmediato de toBlob()?
No. Es el retorno documentado del método. Su función de retorno recibe el Blob de imagen o null; una excepción síncrona de seguridad es distinta del retorno inmediato y de la función posterior.
¿Existe un tamaño Canvas máximo común a todos los navegadores?
Las fuentes citadas no ofrecen un límite numérico portátil. Deben registrarse las dimensiones solicitadas y el estado observado. No se debe tratar el máximo de un navegador y entorno como un límite de todas las implementaciones.
¿Demuestra una URL de datos coincidente la misma identidad de navegador?
No. La igualdad puede referirse a una imagen codificada o solo al indicador vacío. Ninguna establece una persona, una configuración completa ni la decisión de un sitio. Hay que conocer el estado de exportación antes incluso de interpretar una comparación entre archivos.
¿Puede una semilla de ruido fija explicar un error de exportación?
No por sí sola. Los controles de semilla se ocupan de la consistencia de píxeles; los estados documentados dependen de dimensiones, limpieza de origen, representación y serialización. Una semilla sola no establece qué condiciones se cumplieron ni si se exportó una imagen.
Fuentes
- WHATWG HTML: Canvas y serialización de mapas de bits
- MDN: HTMLCanvasElement.toDataURL
- MDN: HTMLCanvasElement.toBlob
- Documentación Canvas de BotBrowser
Conclusión práctica
Hay que clasificar la exportación antes de comparar una huella Canvas. data:,, SecurityError síncrono, null de retorno, alternativa PNG e imagen codificada son resultados diferentes. Se deben conservar las dimensiones del mapa y la representación solicitada frente a la devuelta, omitiendo imágenes crudas cuando no hagan falta. El flujo de huella Canvas y el análisis de BrowserLeaks cubren después etapas diferentes que siguen a una exportación correcta.
Este artículo forma parte de la guía: ¿Qué es la huella digital del navegador?
Artículos Relacionados
Informe Canvas de BrowserLeaks: señales y límites
Huella digitalHuella de Canvas: cómo funciona y qué ayuda
Huella digitalInforme WebGL de CreepJS: contextos y señales
Huella digitalHuella getClientRects: coherencia de DOMRect
Huella digitalModo determinista: huellas reproducibles del navegador
Huella digitalRenderizador WebGL ausente: privacidad o contexto
Lleva BotBrowser de la investigación a producción
Usa estas guías para entender el modelo y después avanzar hacia validación multiplataforma, contextos aislados y despliegue de navegador preparado para escalar.