Una app nativa incluye un layout consciente del teclado: cuando aparece el teclado, el campo enfocado se desplaza a la vista y nada queda oculto. Dentro de un WebView esa garantía desaparece. El WebView no redimensiona el viewport visual de forma independiente cuando aparece el IME; la página no ve la geometría del teclado; y en Android e iOS el input en el que el usuario escribe queda rutinariamente cubierto. Los formularios de login y pago se vuelven una caja ciega. Un runtime propio del host ofrece un puente consciente del teclado: el host reporta el rectángulo del IME a la página y mantiene el campo enfocado visible.
El WebView no ve el teclado
En Android, Chrome 108+ cambió el manejo del teclado para que el navegador redimensione solo el viewport visual y deje el layout intacto (resizes-visual). WebView fue explícitamente excluido de ese cambio. Un reporte de bug aún abierto en Chromium (issue 40287394) confirma que WebView "no puede redimensionar el Viewport Visual independientemente del Viewport de Layout", y la Virtual Keyboard API simplemente no funciona allí: el boundingRect queda en cero y el evento geometrychange nunca se dispara. Así, con adjustResize todo el layout salta; con adjustPan el layout se desplaza pero se recorta la parte superior; y la página no tiene señal fiable de dónde está el teclado.
iOS también oculta el campo
En iOS, WKWebView no desplaza automáticamente el input enfocado a la vista cuando aparece el teclado, y la API visualViewport se comporta de forma inconsistente entre versiones. El resultado es el mismo: el campo en el que el usuario escribe queda detrás del teclado, y la página no puede traerlo al frente porque nunca conoce el tamaño ni la posición del teclado.
Qué se rompe cuando el campo está oculto
- El login falla en silencio. El campo de contraseña queda bajo el teclado; el usuario escribe a ciegas y envía credenciales erróneas.
- Los pagos se estancan. Los inputs de tarjeta y OTP quedan cubiertos; el checkout no puede continuar.
- El layout salta.
adjustResizerefluye toda la página; los elementos sticky y fixed se rompen. - Ruleta de versiones. WebView 139+ ahora redimensiona el viewport visual con el teclado, pero se ha observado que el evento resize borra el foco del input y vuelve a ocultar el teclado.
- Sin API consistente. Las unidades
dvhsolo ayudan en motores nuevos; los WebView antiguos siguen calculando100vhincluyendo el área del teclado.
La solución del runtime
Un runtime propio del host asume el control del teclado. El host escucha mostrar/ocultar del IME a nivel nativo, calcula el rectángulo del teclado y lo puentea a la página como una señal de inset del teclado. La página entonces mantiene el campo enfocado dentro del área visible — desplazándolo a la vista o dirigiendo el layout desde el inset — sin depender del redimensionado poco fiable del motor. Un comportamiento, todos los dispositivos, todas las versiones del SO.
| Dimensión | WebView | Runtime propio del host |
|---|---|---|
| Geometría del teclado | Invisible para la página | El puente reporta el rect IME |
| Redimensionado del viewport visual | No independiente (Android) | Dirigido por el host, consistente |
| Campo enfocado en iOS | No se auto-desplaza | El host lo desplaza a la vista |
| Efectos de adjustResize | Salto de layout | Ninguno — consciente del inset |
| Comportamiento entre versiones | Se rompe por build de WebView | Estable |
| Foco del input | Se pierde en algunos redimensionados | Preservado |
Una app nativa nunca deja que el teclado se coma el campo. Un WebView puro lo hace a menudo. Un runtime pone el teclado donde la página puede verlo — y el campo de vuelta donde el usuario puede verlo.
Fuentes
- Chromium Issue Tracker — WebView no redimensiona el Viewport Visual de forma independiente — bug abierto; Virtual Keyboard API no funciona en WebView.
- Android Developers — Entender los insets de ventana en WebView — cómo recibe WebView los insets del teclado.
- Chrome for Developers — Comportamiento de redimensionado del viewport (Chrome 108+) — resizes-visual que WebView nunca recibió.
- Honor — Guía de compatibilidad Android 17 (WebView 139 teclado + bug de foco) — resize borra foco, oculta teclado.
- MDN — Visual Viewport API — el viewport que el teclado debería redimensionar.