Show HN: Vi este experimento alucinante, así que hice una versión simple de él
Una demo del navegador que une varias ventanas superpuestas en un único lienzo interactivo está encantando a la gente como un uso creativo de las APIs web, al tiempo que plantea dudas sobre privacidad y seguridad. Los comentaristas exploran implementaciones alternativas usando localStorage, BroadcastChannel o postMessage en lugar de WebSockets, y señalan experimentos multi-ventana anteriores en juegos y proyectos artísticos. Muchos se inquietan de que APIs como `window.screenX/Y` y otras propiedades relacionadas con la pantalla o la batería existan siquiera, argumentando que permiten fingerprinting y clickjacking sin ofrecer mucho beneficio legítimo.
Concepto y comportamiento de la demo
- Varias ventanas del navegador actúan como un único lienzo compartido.
- Cada ventana informa de su tamaño/posición; el contenido se renderiza de modo que los objetos se extiendan e interactúen a través de ventanas superpuestas.
- Varios comentaristas encontraron esto alucinante o visualmente impresionante; otros señalan que conceptualmente es similar a los juegos multijugador con múltiples vistas en un espacio de coordenadas compartido.
Implementación: sockets vs APIs del navegador
- La inspiración original usaba eventos de
localStoragepara sincronización entre ventanas. - Esta versión usa WebSockets; algunos lo ven como “sobreingeniería”, mientras que otros señalan que permite compartirlo con amigos a través de la red.
- Se sugirieron alternativas:
BroadcastChannelpara mensajería entre pestañas/ventanas del mismo origen.postMessage()/ canales de mensajes cuando una ventana abre otra.- service workers o incluso loopback de WebRTC.
- Algunos señalan que, para una demo local de un solo usuario, los sockets añaden una latencia evitable.
Retardo, rendimiento y comportamiento del navegador
- Varios preguntan por qué la interacción tiene lag cuando parece “trivial”.
- Posibles razones propuestas:
- Retrasos de WebSocket o de red (aunque la red local debería ser rápida).
- Las actualizaciones de la posición de la ventana no se sincronizan con el hilo de JS.
- El navegador limita las pestañas/ventanas en segundo plano.
- Consultar la posición de la ventana en sí mismo es una función lenta del navegador.
- Limitaciones generales de GUI/compositor; sincronizar varias ventanas de forma fluida no es trivial ni siquiera de forma nativa.
Seguridad, privacidad y APIs web cuestionables
- A muchos les preocupa que existan
window.screenX/screenYy propiedades similares; exponen la ubicación de la ventana y las características de la pantalla. - Preocupaciones:
- Fingerprinting del navegador mediante el tamaño/posición de la pantalla.
- Clickjacking al predecir dónde aparecerán los diálogos del sistema.
- El principio de que las páginas web no deberían saber nada del entorno fuera del viewport.
- Algunas configuraciones de navegador/SO (por ejemplo, con ajustes de privacidad específicos o compositores Wayland) ya fijan estos valores en 0 o los ocultan.
- Crítica más amplia a las APIs web “sobrecargadas” (por ejemplo, Battery Status) y referencias a abusos pasados y medidas defensivas (como las restricciones de tamaño de ventana de Tor).
Aplicaciones, arte previo y demos relacionadas
- Usos sugeridos: interfaces en capas al estilo AR, gestión de capas en programas de dibujo, diagramas de mezcla de colores, efectos de “deslizamiento” entre varios monitores, navegación colaborativa.
- Otros dicen que nada aquí es técnicamente nuevo; demos y juegos similares de múltiples ventanas existen desde hace años (por ejemplo, física o Pong a través de ventanas, experimentos de Chrome, implementaciones antiguas de ActiveX/NPAPI).
- Varios enlaces a proyectos previos y paralelos (escenas 3D, herramientas de dibujo, juegos multi-ventana) refuerzan que se trata de un ejemplo divertido y pulido de un truco de larga data.