Coherencia y privacidad de Worker y OffscreenCanvas
Diseña y revisa flujos de Worker y OffscreenCanvas con límites claros de ciclo de vida, renderizado, accesibilidad y privacidad.
BotBrowser Team
Quieres la documentación estructurada de Plataforma?
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.
BotBrowser ofrece protección basada en perfiles para superficies documentadas de lectura de Canvas en un flujo autorizado. No sustituye la seguridad origin-clean ni la responsabilidad de accesibilidad, y no garantiza el mismo planificador o los mismos píxeles del Worker en todos los hosts. Los Workers permiten mover JavaScript fuera del hilo principal. OffscreenCanvas permite que el dibujo compatible se ejecute sin un elemento canvas visible en ese hilo. Juntos pueden mejorar la respuesta, pero añaden otro límite de ciclo de vida y renderizado que debe revisarse.
Separa las responsabilidades
La página controla la interacción, el estado visible, el contenido alternativo y la cancelación. Un Worker dedicado controla el cálculo asignado. OffscreenCanvas es una superficie que puede transferirse al Worker cuando el navegador lo admite. Transferirla cambia la propiedad; no promete los mismos píxeles en todos los navegadores, sistemas operativos, backends gráficos o conjuntos de fuentes.
Define entradas, mensajes, resultado esperado, errores, cancelación y limpieza. Un Worker no es un límite de seguridad: el código del mismo origen conserva sus permisos y los datos enviados deben limitarse a lo necesario.
Prueba un recorrido completo y visible
Una página vacía solo demuestra que se inició un script. Prueba el recorrido compatible: crea el Worker, transfiere o crea la superficie, envía datos sintéticos representativos, espera un mensaje de listo o error, muestra el resultado y termina el Worker normalmente. Mantén un estado de texto u otra alternativa accesible alineada con la salida visual.
Fija la versión de la aplicación y del navegador, la familia de perfil, el viewport, la escala, la ruta y la política de almacenamiento al comparar entornos. Describe el resultado visible en lenguaje normal, por ejemplo: «el gráfico se puede leer y el resumen está disponible».
Entiende la transferencia y el ciclo de vida
HTMLCanvasElement.transferControlToOffscreen() transfiere el control de un canvas a un OffscreenCanvas. El elemento original ya no puede controlarlo. El Worker recibe el objeto mediante un mensaje cuya lista de transferencia lo incluye. Trata la entrega como unidireccional y define qué ocurre ante una inicialización repetida.
Un Worker puede fallar antes de dibujar, durante un mensaje o al cerrarse. Gestiona error, messageerror, los mensajes de error de la aplicación y la cancelación. Libera referencias y termina el Worker al finalizar. Los mensajes enviados después de terminar deben producir un fallo comprensible, no perderse en silencio.
Mantén alineados el renderizado y la accesibilidad
Los píxeles de Canvas no sustituyen texto, datos tabulares, interacción de teclado ni un estado anunciado. Ofrece un nombre, resumen o vista de datos accesible y actualízalo cuando el Worker informe de un nuevo estado. Si OffscreenCanvas no está disponible, usa una alternativa documentada: canvas normal en el hilo principal, imagen o tabla.
El renderizado puede variar por implementación del navegador, escala, fuentes, color y backend gráfico. Define la aceptación por capacidades compatibles y resultados visibles. No prometas identidad bit a bit entre hosts salvo que el producto la admita y la compruebe.
Privacidad y límites de origen
Los Workers no eliminan las reglas de origen. Imágenes o medios de otro origen pueden hacer que un canvas deje de ser origin-clean, y el navegador restringirá la lectura de píxeles. Explica ese límite en lugar de intentar rodearlo. No envíes píxeles sin procesar, datos de cuenta ni identificadores estables al Worker salvo necesidad justificada.
BotBrowser ofrece protección determinista basada en perfiles para superficies documentadas de lectura de Canvas. Puede ayudar a que un perfil compatible produzca un resultado reproducible en un flujo autorizado, pero no sustituye el modelo de seguridad origin-clean, no resuelve la accesibilidad ni garantiza el mismo planificador o renderizado del Worker en todos los hosts. Un perfil de BotBrowser tampoco promete anonimato o aceptación por un sitio.
Usa filas separadas para versión, plataforma, modo headless o headed, ruta gráfica, soporte de Worker, soporte de OffscreenCanvas, alternativa, almacenamiento y resultado visible. Repite la fila aceptada tras actualizar el navegador, el perfil, la imagen del host, los gráficos o la aplicación.
Si una fila difiere, clasifica primero el resultado: capacidad ausente, error de aplicación, variación dentro del límite documentado o alternativa incompleta. Conserva el paquete aceptado mientras la persona responsable repite el recorrido y registra la decisión.
- Define mensajes, cancelación, errores y limpieza del Worker.
- Prueba la transferencia de propiedad y la alternativa no compatible.
- Sincroniza la salida visual con el estado accesible.
- Trata origin-clean como un límite de seguridad del navegador.
- Separa la capacidad de BotBrowser de la responsabilidad de la aplicación.
- Registra navegador, perfil, host, ruta gráfica y resultado visible.
Practical checklist
Fuentes públicas: WHATWG HTML Canvas, MDN Web Workers API, MDN OffscreenCanvas y protección Canvas de BotBrowser.
Lectura relacionada: Coherencia entre realms del navegador y privacidad y Propósito y privacidad de Canvas API.
Sources
WHATWG HTML Canvas: https://html.spec.whatwg.org/multipage/canvas.html
MDN Web Workers API: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API
MDN OffscreenCanvas: https://developer.mozilla.org/en-US/docs/Web/API/OffscreenCanvas
Protección Canvas de BotBrowser: https://botbrowser.io/docs/fingerprint/canvas/
Artículos Relacionados
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.