Android app 与网页交互 WebView 与JS交互

Android app 与网页交互 WebView 与JS(JavaScript)交互 安卓webview 传递数据到网页
转载请注明出处:http://blog.csdn.net/touxiong/article/details/78769966
本文包含如下要点:

WebView的基础用法;
执行JavaScriptInterface及其方式;
demo app的AndroidStudio源代码。

老大说做个demo把人脸检测中人眼坐标传递到网页上显示出来,第一个想到的事webview,
但书上支持说用GET POST,并不能实现这种效果,请教罗享同志后百度webview与JS交互就有了.

进入正题:
网页HTML 网页 JavaScript 代码


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>hello World !</title>
    <script type="text/javascript">
        function  changebody(leftX,leftY,rightX,rightY) {
            document.getElementById("textOne").innerText = "左眼 x:"+leftX+" y:"+leftY;
            document.getElementById("textTwo").innerText = "右眼 x:"+rightX+" y:"+rightY;
        }


    </script>


</head>
<body>
   <div id="textOne";width=80px;height=100px>左眼 x:  y:</div>
   <div id="textTwo";width=80px;height=100px>右眼 x:  y:</div>

</body>
</html>

网页服务器已经架设好了,运行的代码如上,现在Android需要通过webview将数据传递给changebody在网页中显示出来.

关键代码:

        WebView webView = (WebView) findViewById(R.id.web_view);//获取WebView的实例
        webView.getSettings().setJavaScriptEnabled(true); //让webview支持JavaScript脚本
        webView.setWebViewClient(new WebViewClient());//调用setwebviewclient方法并传入一个webviewclient实例
        webView.loadUrl("http://10.10.31.3:8080/index.jsp");//调用loadURL方法并传入网址 即可展示网页内容
        mJSHook = new JSHook();//获取JSHook实例
        webView.addJavascriptInterface(mJSHook, "test");//添加JS反射接口并传入mJSHook实例

webview提供addJavascriptInterface方式。该方式包含两项参数:

绑定到JavaScript的类实例。
用来显示JavaScript中的实例的名称。

Class JSHook:
    String CHANGE_BODY = "javascript:changebody(%s)";

    public class JSHook{

        public void sendEyeXY(float x, float y, float m, float n){
            Log.d(TAG , "JSHook.sendEyeXY() called! + ");
            String arg = x + ","+ y+ ","+ m+ ","+ n;
            //changebody(x,y,m,n)

            webView.loadUrl(String.format(CHANGE_BODY , arg));
        }
    }

调用:

mJSHook.sendEyeXY(leftEyeX,eyeLeftY,eyeRightX,eyeRightY);

测试demo的时候发现代码都是按照webview与JS开发流程写的,但是数据就是没传递过去,后台服务器也没检测到访问,罗同志一直怀疑是参数传递有问题,故上面的参数单独拿出来了,然后灵光一现,发现是在onCreat中调用的JavascriptInterface中的sendEyeXY方法,建议加一个按键去调用这个js interface,果然马上就把数据显示出来了,但这是为什么呢???

最后懒人福利,附上源码参考:
DEMO源码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值