Detectar clic en el botón HTML a través de javascript en Android WebView

No estoy muy familiarizado con javascript, pero creo que esta es la mejor manera de lograr mi propósito. Si no, por favor, corrija.

Tengo una licencia de texto 2 botones al final. Todo esto está escrito en HTML en un WebView porque hay algunos enlaces en la licencia. Ahora, quiero que cuando el usuario haga clic en el botón "ok" en el WebView , esto desencadena algún javascript u oyente que puedo agarrar en Java para disparar un Intent de ir adelante en la aplicación. (El botón de cancelar haría lo contrario, pero si sé cómo hacer uno, puedo hacer el otro.;))

¿Le suena algo a alguien? Cualquier explicación o código de ejemplo es bienvenido.

Finalmente lo conseguí por mi cuenta después de leer. Tipo de duro cuando no sabes nada acerca de javascript y cuando el doc es bastante delgada sobre el tema.
Aquí está mi solución, espero que esto ayude a otros:

Con una página HTML que contiene 2 botones al final como eso:

 <div> <button type="button" id="ok" style="font-weight: 700; margin-right: 20px;" onclick="validClick();">J'accepte</button> <button type="button" id="no" onclick="refuseClick();">Je refuse</button> </div> 

Envío el evento del clic al javascript en la parte superior de mi página HTML:

 <script language="javascript"> function validClick() { valid.performClick(); document.getElementById("ok").value = "J'accepte"; } function refuseClick() { refuse.performClick(); document.getElementById("no").value = "Je refuse"; } </script> 

valid y refuse 2 objetos java que pasé a través de la interfaz javascript para usar sus métodos. Así que en java, he creado 2 botones (no se muestra realmente en la actividad, sólo aquí para sus métodos y son una especie de sombras de los botones HTML:

 valid = new Button(ctx); valid.setOnClickListener(this); refuse = new Button(ctx); refuse.setOnClickListener(this); 

Luego he añadido javascript a mi WebView :

 // Enablejavascript WebSettings ws = wv.getSettings(); ws.setJavaScriptEnabled(true); // Add the interface to record javascript events wv.addJavascriptInterface(valid, "valid"); wv.addJavascriptInterface(refuse, "refuse"); 

Y, finalmente, manejar los eventos de clic en el método onClick:

 @Override public void onClick(View v) { if (v.equals(valid)) { //do Something } else if (v.equals(refuse)) { //do Something else } } 

Espero que esto ayude a algunas personas

Aquí hay una solución más sencilla. En el lado de Java, cree un oyente para cada botón. No necesita ser ninguna clase particular, ya que el método será buscado usando la reflexión:

 WebSettings ws = wv.getSettings(); ws.setJavaScriptEnabled(true); wv.addJavascriptInterface(new Object() { public void performClick() { // Deal with a click on the OK button } }, "ok"); 

Luego, en el HTML, llámalo directamente desde la etiqueta del botón:

 <button type="button" onclick="ok.performClick();">OK</button> 

En caso de que también desee recuperar el valor del botón.

Java:

 WebSettings ws = wv.getSettings(); ws.setJavaScriptEnabled(true); wv.addJavascriptInterface(new Object() { @JavascriptInterface // For API 17+ public void performClick(String strl) { stringVariable = strl; Toast.makeText (YourActivity.this, stringVariable, Toast.LENGTH_SHORT).show(); } }, "ok"); 

HTML:

 <button type="button" value="someValue" onclick="ok.performClick(this.value);">OK</button> 
  WebView browser = new WebView(this); browser.getSettings().setJavaScriptEnabled(true); browser.loadUrl("file:///android_asset/page.html"); setContentView(browser); WebSettings ws = browser.getSettings(); ws.setJavaScriptEnabled(true); browser.addJavascriptInterface(new Object() { @JavascriptInterface // For API 17+ public void performClick(String strl) { Toast.makeText (MainActivity.this, strl, Toast.LENGTH_SHORT).show(); } }, "ok"); 

Page.html file

 <html> <body> First name: <input type="text" name="fname" id="txtfname"><br> Last name: <input type="text" name="lname" id="txtlname"><br> <script> function getValues() { document.getElementById("btnOK").value = document.getElementById("txtfname").value+" "+document.getElementById("txtlname").value; } </script> <button type="button" value="" id="btnOK" onclick="getValues();ok.performClick(this.value);">OK</button> </body> </html> 
  • Cómo detectar un gesto de desplazamiento en la vista web
  • Cargar HTML estático en Webview
  • Cómo mostrar el contenido web en iOS y Android mediante QML
  • Notificación de empuje en Web móvil
  • Reproducción de un video local de aplicación (.mp4) en una vista web
  • ¿Necesito aplicaciones separadas de Twitter para la integración con aplicaciones de iOS y Android + Web?
  • ¿Qué es un servicio web en android?
  • ¿Cómo generar enlace waze meetup con fallback web?
  • ¿Por qué utilizar sqlite Database en Android?
  • ¿Cómo puede una aplicación comunicarse con un servidor y reflejar las actualizaciones de inmediato?
  • Llamar al servicio web WSDL mediante el uso de retrofit android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.