通过Android WebView中的javascript检测点击HTML按钮
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过Android WebView中的javascript检测点击HTML按钮相关的知识,希望对你有一定的参考价值。
我对javascript不是很熟悉,但我认为这是实现目标的最佳方式。如果没有,请纠正我。
我最后有一个许可文本2按钮。所有这些都是用WebView
中的html编写的,因为许可证中有一些链接。现在,我希望当用户点击WebView
中的“ok”按钮时,这会触发一些我可以用Java抓取的javascript或者监听器,以便在应用程序中启动Intent
。 (取消按钮会相反,但如果我知道如何做,我可以做另一个。;))
这会给某人敲响吗?欢迎任何解释或示例代码。
经过一番阅读后,我终于得到了它。当你对javascript一无所知以及文档在这个主题上相当薄时,有点难。 这是我的解决方案,希望这会有助于其他人:
使用包含2个按钮的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>
valid
和refuse
是我通过javascript接口使用他们的方法的2个java对象。所以在java中,我创建了2个按钮(实际上并没有真正显示在Activity中,只是在这里用于他们的方法,并且是HTML按钮的阴影:
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方法中的click事件:
@Override
public void onClick(View v) {
if (v.equals(valid)) {
//do Something
} else if (v.equals(refuse)) {
//do Something else }
}
希望这会对一些人有所帮助
这是一个更简单的解决方案。在Java端,为每个按钮创建一个监听器。它不需要是任何特定的类,因为将使用反射查找该方法:
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 type="button" onclick="ok.performClick();">OK</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>
以上是关于通过Android WebView中的javascript检测点击HTML按钮的主要内容,如果未能解决你的问题,请参考以下文章
通过@JavascriptInterface将字符串从Android传递给WebView中的JS
通过Android WebView中的javascript检测点击HTML按钮
通过Android WebView中的javascript检测点击HTML按钮