欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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>

  
搞定。