Vista previa de PDF en blanco en iPhone: el bug de Safari que acabamos de arreglar
2026-09-14
Un usuario lo reportó sin rodeos: al tocar un archivo para previsualizarlo en iPhone no pasaba nada, o la página se rendía. En escritorio todo funcionaba. Esta es la historia de lo que estaba roto de verdad y de cómo lo arreglamos para cualquier iPhone en uso real.
El síntoma frente a la causa
Nuestro motor de vista previa es pdf.js, que parsea todo dentro de un Web Worker para que la página no se congele. El fallo no estaba en nuestro código: pdfjs-dist 4.x llama a Promise.withResolvers, una API de JavaScript que Safari solo incorporó en la versión 17.4. En iOS 17.3.1 y anteriores, al intentar parsear un PDF el worker tropezaba con una función inexistente y la vista previa fallaba en silencio.
Por qué un polyfill normal no bastaba
La solución típica es polyfill de la función antes de cargar la librería. Pero un Web Worker es un ámbito de JavaScript aparte: la página y el worker no comparten globales, así que un polyfill instalado en la página nunca llega al worker donde ocurría el fallo. Tuvimos que publicar nuestro propio archivo de entrada del worker que instala el polyfill primero y solo después carga el worker real de pdf.js.
Otros dos duendes de iPhone que arreglamos por el camino
- Clics fantasma: iOS a veces dispara un segundo toque retardado tras abrir una capa a pantalla completa, lo que podía cerrar al instante una vista previa recién abierta. Ahora la capa ignora toques de cierre durante los primeros 400 milisegundos.
- Presión de memoria: antes se rasterizaban al momento las miniaturas de todas las páginas. Los móviles matan pestañas antes que los portátiles, así que ahora se pintan con ganas las primeras 12 páginas y el resto se muestra con una etiqueta +N.
Cómo lo verificamos
Probamos en un iPhone real con iOS 17.3.1 en Safari, Chrome y el navegador integrado de Telegram; en emulaciones de iPad mini, iPad Pro, tablet Android y Safari y Chrome de escritorio. También construimos una página de diagnóstico pública que ejecuta todo el pipeline de PDF en cualquier dispositivo e informa capa por capa: si una futura actualización de navegador rompe algo, cualquier usuario puede enviarnos un informe en 30 segundos.
Qué significa para ti
El procesamiento local, sin subidas, no es una frase de marketing: es un compromiso de ingeniería. Incluye el trabajo poco glamuroso de dar soporte a teléfonos que dejaron de recibir actualizaciones hace años. Si alguna vez ves una vista previa en blanco en cualquier dispositivo, abre nuestra página de diagnóstico y cuéntanos qué dice.