wake-up-neo.com

Klicken Sie in Android WebView auf die HTML-Schaltfläche, um dies zu erkennen

Ich bin mit Javascript nicht sehr vertraut, aber ich denke, dies ist der beste Weg, um meinen Zweck zu erreichen. Wenn nicht, bitte korrigieren Sie mich.

Ich habe einen Lizenztext 2 Buttons am Ende. All dies ist in HTML in einem WebView geschrieben, da die Lizenz einige Links enthält. Nun möchte ich, dass, wenn der Benutzer auf die Schaltfläche "OK" im WebView klickt, dies ein Javascript oder einen Listener auslöst, den ich in Java zum Auslösen eines Intent, um in der Anwendung fortzufahren. (Der Abbrechen-Button würde das Gegenteil bewirken, aber wenn ich weiß, wie man einen macht, kann ich den anderen machen.;))

Läutet das jemandem etwas an? Jede Erklärung oder Beispielcode ist willkommen.

37
Sephy

Nach einigem Lesen habe ich es endlich alleine geschafft. Etwas schwierig, wenn Sie nichts über Javascript wissen und wenn das Dokument zu diesem Thema ziemlich dünn ist.
Hier ist meine Lösung, hoffe das wird anderen helfen:

Mit einer HTML-Seite mit 2 Buttons am Ende so:

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

Ich sende das Ereignis des Klicks an das Javascript oben auf meiner HTML-Seite:

<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 und refuse sind 2 Java) Objekte, die ich durch die Javascript-Oberfläche geschickt habe, um ihre Methoden zu verwenden. Also habe ich in Java 2 Buttons erstellt (nicht wirklich angezeigt) in der Aktivität nur hier für ihre Methoden und sind eine Art Schatten der HTML-Schaltflächen:

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

Dann habe ich Javascript zu meinem WebView hinzugefügt:

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

Behandeln Sie abschließend die click-Ereignisse in der onClick-Methode:

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

Hoffe das wird einigen Leuten helfen

60
Sephy

Hier ist eine einfachere Lösung. Erstellen Sie auf der Seite Java) für jede Schaltfläche einen Listener. Es muss sich nicht um eine bestimmte Klasse handeln, da die Methode mit Reflection nachgeschlagen wird:

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

Rufen Sie es dann im HTML direkt vom Button-Tag aus auf:

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

Falls Sie auch den Schaltflächenwert abrufen möchten.

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>
21
user2999943
    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>
2
Raviraj Desai