Realizar las llamadas directamente desde java a javascript con Phonegap
Estoy escribiendo un complemento nativo para crear un evento en JavaScript cuando se muestra el teclado. Hago esto:
appView.sendJavascript("cordova.fireWindowEvent('show_keyboard')")
En mi JavaScript, entonces hago algo como:
- Cómo poblar webview en android con texto sin formato de base de datos y ser capaz de manejar caracteres de nueva línea
- Evento clave no se dispara en Firefox en Android cuando la sugerencia de palabras está activada
- Integración de Facebook en aplicaciones móviles multiplataforma
- No se eliminan las cookies del navegador móvil (cromo, safari) en la sesión de cierre
- Cómo deshabilitar completamente el teclado virtual para todas las entradas en la vista web de Android
window.addEventListener('show_keyboard', handler);
Sin embargo, esto ha sido señalado como un gran no no en PhoneGap por un experto PhoneGap en el equipo. ¿Qué hay de malo con este enfoque?
- Phonegap cordova nativo android menubutton no disparar
- ¿Cómo validar los valores de TextInput en reaccionar nativo?
- No se pudo encontrar la herramienta "aapt"! Es posible que deba actualizar su SDK de Android, incluidas las herramientas de plataforma
- La selección de WebView hace que el teclado virtual se oculte temporalmente y luego regrese
- Comportamiento extraño de la aplicación híbrida basada en CrossWalk al reproducir audio web de m4a
- Cordova error javascript: no tiene método startsWith Android
- ¿Cuál es mejor usar Sencha Touch o phonegap para Android?
- La mejor manera de evitar los efectos del algoritmo Nagle usando webSockets?
En busca de una respuesta de fuentes creíbles y / o oficiales.
Bueno yo también no soy un experto PhoneGap, pero Apache Cordova , el motor que tiene PhoneGap fuente en GitHub .
¿Qué dice la fuente?
Bueno, como un ejemplo, veamos cómo Cordova envía su evento volumedownbutton
. Presento las líneas 613-621 de CordovaWebView.java :
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { this.loadUrl("javascript:cordova.fireDocumentEvent('volumedownbutton');"); return true; } // If volumeup key else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { this.loadUrl("javascript:cordova.fireDocumentEvent('volumeupbutton');"); return true; }
Parece que Cordova emplea un enfoque similar para enviar eventos a JavaScript.
¿Qué hay de malo en lo que tienes?
No estoy seguro de cuál fue el problema exacto que su compañero de trabajo planteó, pero parece que sendJavascript
está obsoleto . Así que, ahí está eso. Pero si tu appView
es un CordovaWebView
, solo puedes llamar a loadUrl
de la misma manera que lo hace Córdova (como se muestra arriba).
No soy experto en telefonía, pero ¿por qué no llamas directamente al método en lugar de usar oyentes?
por ejemplo
function keyboardShown() { alert("test"); //or other code }
y
appView.sendJavascript("keyboardShown();")
De esta manera se elimina la sobrecarga que tiene a través del oyente.
Si esto todavía no satisface a su experto del teléfono, pregúntele qué él haría para mejorar este código.
- Android: acelerómetro de lectura sin asignación de memoria?
- Establecer arrastrar audiencia en SpannableString