Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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.;))

  • MapView inside Fragmento - el niño especificado ya tiene un padre
  • ¿Es posible utilizar un BLE habilitado para Android / iPhone como un faro BLE?
  • Los complementos no siempre se agregan después de cordova añadir plataforma android and iOs
  • Comparar dos voces en android
  • Lectura de PDF desde una aplicación de Android
  • Obtener nombre de archivo después de que el filereader cargue asincrónicamente un archivo
  • ¿Le suena algo a alguien? Cualquier explicación o código de ejemplo es bienvenido.

  • Error StrictMode $ AndroidBlockGuardPolicy.onNetwork
  • Personalizar divisor / separador en la lista desplegable de un AutocompleteTextview
  • ActionBar no se desplaza a la pestaña seleccionada si ésta está fuera de los límites visibles de actionBar en la pantalla
  • Las pruebas fallan después de la actualización de Espresso 2 (falló: La ejecución de instrumentación falló debido a 'java.lang.IllegalAccessError')
  • Google + Iniciar sesión: la actividad no se iniciará
  • La compilación de Gradle falla al buscar los servicios de Google Play en Android Studio
  • 4 Solutions collect form web for “Detectar clic en el botón HTML a través de javascript en Android WebView”

    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> 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.