En la vista web de Android cuando ejecuto javascript desaparece el sotfkeyboard
En WebView cuando ejecuto un JavaScript a través de webview.loadUrl (), el teclado desaparece si es visible. Cuando intento escribir algo de texto en el campo de texto html, desaparece el teclado (si se ejecuta JavaScript) y no puedo escribir todo el texto.
El campo de texto no pierde el foco, por lo que el mensaje sigue en el campo de texto, pero el teclado virtual se va hacia abajo.
- Implementar la entrada de pago Stripe en la aplicación Cordova / Phonegap
- screen.width + android
- Cómo tomar una captura de pantalla en la aplicación cordova / phonegap
- CSS: ronda /: enfoque vs evento de clic en dispositivos móviles (móviles)
- Phonegap 3.0 - Android: Barra de desplazamiento nativa no visible
¿Puede alguien decirme cómo solucionar eso?
- ¿La mejor manera de hacer aplicaciones multiplataforma?
- diferencia entre cocos2d-x vs cocos2d-js
- ¿Alguna forma de comunicarse con WebView en Android?
- HTML5 Canvas en teléfonos Android - Redibujar y resaltar problemas
- La alerta de JavaScript no funciona en Android WebView
- Obtener ubicación de la imagen - Cámara Phonegap
- ¿Dónde se muestran las notificaciones en Chrome en Android?
- Weinre no puede abrir archivos .js
La forma más sencilla de hacerlo es almacenar las llamadas javascript en un plugin o JavascriptInterface y tener método de repetición en su lado javascript que lo ejecuta. De esta forma nunca se llama loadUrl
.
Algo como:
StringBuilder sb = null; private final Object LOCK = new Object(); public void sendJavascript(String js){ synchronized(LOCK) { if (sb == null){ sb = new StringBuilder(); sb.append("javascript:"); } sb.append(js): } }
A continuación, utilizando un javascriptInterface:
private class JsInterface { @JavascriptInterface public String getJavascript(){ synchronized(LOCK) { String javascriptToRun = sb.toString(); sb = new StringBuilder(); sb.append("javascript:"); return javascriptToRun; } } }
Agregue su interfaz javascript a su webview:
JsInterface jsInterface = new JavascriptInterface(); webview.addJavascriptInterface(jsInterface, "JsInterface");
Y en su código javascript establecer un intervalo de tiempo para recuperar la función almacenada.
EDITAR
Acabo de encontrar esta respuesta , muestra que el mío tiene un gran problema, los métodos no están sincronizados. Significado cuando llamas a getJavascript()
nuestra variable sb
puede no estar lista para ser leída todavía. He añadido el bit correspondiente a la fuente anterior.
UTILICE LOS CERRADURAS o su código no será fiable
Ese es un comportamiento esperado: al llamar a WebView.loadUrl()
básicamente se está recargando la página, por lo tanto se WebView.loadUrl()
.
Como alternativa, puede intentar determinar si se muestra el teclado virtual y retrasar la ejecución JS hasta que se oculte. Para obtener un método general para comprobar el estado del teclado virtual, consulte ¿Cómo comprobar la visibilidad del teclado del software en Android?
- Permiten a los usuarios crear formularios dentro de la aplicación android survey / data collection
- Android: teclado suave empuja toda la distribución, necesita cambiar el tamaño de la vista de lista