Saltar al contenidoSkip to content
Nano Developers Nano Developers
Notas de ingenieríaEngineering notes

Apps móvilesMobile apps · Septiembre de 2026September 2026 · 4 min

Videoconsulta dentro de una app híbrida: manda frame-ancestorsVideo visits inside a hybrid app: frame-ancestors decides

Lo que funciona en tu web puede no cargar en la app, aunque el código sea idéntico.

What works on your website may not load in the app, even with identical code.

Teníamos una sala de videoconsulta funcionando en la web: una página propia que embebe al proveedor médico en un iframe. La meta era llevarla tal cual a las apps de iOS y Android, que comparten código con la web.

El origen de una app no es tu dominio

Dentro de una app híbrida la página no vive en https://tudominio.com. En iOS el origen es capacitor://localhost y en Android https://localhost. Si el proveedor publica Content-Security-Policy: frame-ancestors con solo tu dominio web, su sala se niega a cargar dentro de la app, sin importar lo que haga tu código.

Cómo lo resolvimos

  1. Medimos las cabeceras reales del proveedor en cada ambiente con curl, en lugar de deducirlas.
  2. Pedimos al proveedor que agregara los orígenes de la app a su lista de frame-ancestors.
  3. Mientras tanto, la app abre la sala en el navegador del sistema como plan B, en vez de dejar al paciente en una pantalla en blanco.

No resuelvas un bloqueo de iframe permitiendo que la app navegue libremente hacia dominios externos. Abres una puerta mucho más grande que el problema.

We had a video visit room working on the web: our own page embedding the medical provider in an iframe. The goal was to bring it as-is to the iOS and Android apps, which share code with the web.

An app’s origin is not your domain

Inside a hybrid app the page does not live at https://yourdomain.com. On iOS the origin is capacitor://localhost and on Android https://localhost. If the provider sends Content-Security-Policy: frame-ancestors listing only your web domain, its room refuses to load inside the app, no matter what your code does.

How we solved it

  1. We measured the provider’s real headers in each environment with curl instead of guessing.
  2. We asked the provider to add the app origins to its frame-ancestors list.
  3. In the meantime, the app opens the room in the system browser as plan B, instead of leaving the patient on a blank screen.

Do not fix an iframe block by letting the app navigate freely to external domains. You open a much bigger door than the problem.

Equipo de ingeniería de Nano DevelopersNano Developers engineering team

Siguiente notaNext note

Si rompes el código y la prueba sigue verde, sospecha del fixtureIf you break the code and the test stays green, suspect the fixture

Leer notaRead the note

¿Te topaste con algo parecido en tu producto? Lo revisamos contigo.

Run into something similar in your product? We will look at it with you.

Iniciar un proyectoStart a project