Android webview 与js交互

关于中  java代码与h5 中js交互的问题已经是老生常谈的事情了,之前在开发中也有遇到过,但是一直没总结

今天刚好碰到一个同事遇到了这个问题,在帮他解决的同时也在这里总结下常规步骤和注意事项


webview 与js 交互


1.设置webview中允许执行js 代码,这句是基础(废话.

   web.getSettings().setJavaScriptEnabled(true);  

2.为webview 与js直接建立一个共享对象(这里为了简洁直接使用了所在的Activity类对象,

  指定js调用的字段名(这里取名叫 app 可以修改,建议统一

  web.addJavascriptInterface(this, "app");

3.创建与js交互的方法 ,这里这个方法直接写在Activity 中了, 

   在4.2及以上记得在方法上带上注解@JavascriptInterface

  这是因为在js直接与java代码进行交互的话存在漏洞,比方你可以利用java的反射调用一些系统方法,总之没有

   限制是很危险的事情

   注意:request_data  js所调用的java端的所有方法会在子线程中执行,不要直接在方法中进行更新ui的操作

@JavascriptInterface
    public void request_data(String year, String month, int dic){}


4.js端调用java方法 window.app.request_data  这里的 app 即为第二步中为js申明的共享字段名

   如果你修改了这个名字,一定要提醒的前端队友同步修改,前端也是你写的话,当我没说

  window.app.request_data(year,month,0);



5.java调用js方法 heartJson 为你要传递过去的值,因为java和js对象是不互通的,如果需要传递对象和数组之类的,

   请将对象和数组转json之后再使用下面的方法拼接然后调用,

   对象数组要转json,对象数组要转json,对象数组要转json 重要的事情说三遍

   web.loadUrl("javascript:chartHeartRate(" + heartJson + ")")

web端直接将json作为参数传递:window.jsInterface.invokeMethod(json);

这样,安卓端获取的参数也是不可用的,打印出来是undefinded

网页中一定要这样处理一下,再作为参数传递:

var jsonStr = JSON.stringify(json);

window.jsInterface.invokeMethod(jsonStr);

这样,安卓端才能获取到json的字符串,创建出json的对象进行解析。


 6.没了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值