Détecter cliquez sur le bouton HTML via javascript dans Android WebView

Je ne suis pas très familier avec javascript, mais je pense que c'est la meilleure façon d'accomplir mon but. Sinon, corrigez-moi.

J'ai un bouton de licence 2 boutons à la fin. Tout cela est écrit en HTML dans un WebView car il existe des liens dans la licence. Maintenant, je veux que, lorsque l'utilisateur clique sur le bouton "ok" dans la WebView , cela déclenche un javascript ou un auditeur que je peux saisir en Java pour déclencher une Intent d'aller de l'avant dans l'application. (Le bouton d'annulation fera le contraire, mais si je sais comment faire un, je peux faire l'autre.;))

  • Utilisation des API Android de reconnaissance vocale de Google Glass
  • Android - Pourquoi onItemLongClick (...) renvoie un boolean?
  • Un énorme octet dans mon application après HPROF
  • Pourquoi AlertDialog.Builder (contexte contextuel) n'accepte l'activité que comme paramètre?
  • L'échec de la connexion de rétrofit retourne RetrofitError.response comme nulle
  • Android 4.3 avec Genymotion uvesafb: impossible d'exécuter / sbin / v86d
  • Est-ce que cela sonne à quelqu'un? Toute explication ou exemple de code est le bienvenu.

  • L'échec Android de l'intégration ionique - L'exécution a échoué pour le processus de tâcheDebugResources
  • Comment réparer l'orientation de la disposition vers la verticale?
  • Met à jour l'interface utilisateur à partir du thread
  • Comment définir un texte sur une imageView?
  • Android: la couleur setselector pour listview ne fonctionne pas
  • Les problèmes de fuseau horaire lors de la lecture de la date d'Ormlite
  • 4 Solutions collect form web for “Détecter cliquez sur le bouton HTML via javascript dans Android WebView”

    Je l'ai enfin compris tout de suite après quelques lectures. Un peu difficile quand vous ne savez rien sur javascript et lorsque le document est assez mince sur le sujet.
    Voici ma solution, j'espère que cela aidera les autres:

    Avec une page HTML contenant 2 boutons à la fin comme ça:

     <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> 

    J'envoie l'événement du clic au javascript en haut de ma page 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 et refuse sont 2 objets java que j'ai traversé l'interface javascript pour utiliser leurs méthodes. Donc, dans java, j'ai créé 2 boutons (pas vraiment affichés dans l'activité, seulement ici pour leurs méthodes et sont une sorte d'ombre des boutons HTML:

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

    Ensuite, j'ai ajouté javascript à mon WebView :

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

    Et enfin, manipulez les événements de clic dans la méthode onClick:

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

    J'espère que cela aidera certaines personnes

    Voici une solution plus simple. Sur le côté Java, créez un auditeur pour chaque bouton. Il n'a pas besoin d'être une classe particulière, car la méthode sera recherchée en utilisant la réflexion:

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

    Ensuite, dans le HTML, appelez-le directement à partir de la balise de bouton:

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

    Dans le cas où vous souhaitez également récupérer la valeur du bouton.

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

    Fichier page.html

     <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> 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.