在Android WebView中通过JavaScript检测点击HTMLbutton

我不是很熟悉javascript,但我认为这是完成我的目的的最好方法。 如果没有,请纠正我。

我有一个许可证文本2button在最后。 所有这些都是用HTML编写的,因为许可证中有一些链接。 现在,我希望当用户点击WebView的“确定”button时,这会触发一些JavaScript或侦听器,我可以在Java中抓取一个Intent以在应用程序中前进。 (取消button会做相反的事,但如果我知道如何做一个,我可以做另一个;))

这是否对任何人响铃? 任何解释或示例代码是受欢迎的。

读了一遍之后,我终于明白了。 当你对javascript一无所知时,以及当文档在主题上相当薄弱的时候很难。
这是我的解决scheme,希望这会帮助其他人:

使用包含2个button的HTML页面,就像这样:

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

我将点击事件发送到我的HTML页面顶部的javascript:

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

validrefuse是我通过javascript界面​​使用他们的方法通过的2个java对象。 所以在java中,我创build了2个button(不是真的显示在Activity中,只是在这里为他们的方法,并且是HTMLbutton的阴影:

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

然后我将javascript添加到我的WebView

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

最后,处理onClick方法中的点击事件:

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

希望这会帮助一些人

这是一个更简单的解决scheme。 在Java方面,为每个button创build一个侦听器。 它不需要任何特定的类,因为该方法将使用reflection来查找:

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

然后在HTML中,直接从button标签中调用它:

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

如果你还想检索button的值。

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

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