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