android webview中使用Java调用JavaScript方法并获取返回值
程序员文章站
2022-03-23 14:11:45
在android平板上用webview打开一个网页,调用里面的javascript方法,同时相互传参。
网上例子很少啊,基本都不能获取返回值,贴一个自己最后调试完的代码如...
在android平板上用webview打开一个网页,调用里面的javascript方法,同时相互传参。
网上例子很少啊,基本都不能获取返回值,贴一个自己最后调试完的代码如下:
java:
复制代码 代码如下:
protected void oncreate(bundle savedinstancestate)
{
........
x = (webview)this.findviewbyid(r.id.webview_viewtable);
x.setscrollbarstyle(view.scrollbars_inside_overlay);
x.getsettings().setbuiltinzoomcontrols(true);
x.getsettings().setjavascriptenabled(true);
x.addjavascriptinterface(new jstojava(), "stub"); //jstojava是内部类,代码在后面。stub是接口名字。
//x.loadurl("http://192.168.1.1/init.html");//这句是载入一个html页面。但是因为直接load一个网页会有延迟,所以最好用下面这句:
x.loaddatawithbaseurl("", data, "text/html", "utf-8",""); //这句里面data是init.html的内容。就是代码。直接用fileinputstream获取到就好。
x.loadurl("javascript:setvaluesjson('hello world')"); //hello world是给javascript传递的参数。setvaluesjson是页面里javascript的方法。如果传递的参数中有双引号的话,用下面的写法:
string url = "javascript:setvaluesjson(\"" + jsonstring + "\")";
x.loadurl(url);
.........
}//oncreate结束
再写一个内部类:
复制代码 代码如下:
private class jstojava
{
public void jsmethod(string paramfromjs)
{
//log.i("cdh", paramfromjs);
system.out.println("js返回结果" + paramfromjs);//处理返回的结果
}
}
javascript代码:
复制代码 代码如下:
<script type="text/javascript">
function setvaluesjson(param)
{
alert(param);//param是java传过来的值,即"hello world".
var result = "传回java的string";
window.stub.jsmethod(result);//用接口stub, 通过调用内部类中的方法jsmethod给java传回result。
}
</script>
搞定。