优点:可以实现java和js之间的调用
缺点:apk增加将近7MB: 所用到的资源必须手动释放
2:必须创建运行环境,用完必须释放
3:创建之后,加载写好的js文件,里面包含java可能调用的js方法和一些数据
2:java里面加载js文件的异步任务类:
3:java里面初始化数据
4:java调用js函数处理,这里因为常用的就几种,所以写了一个公共的工具:
5:js调用java 这个需要在调用之前 在v8里面注册方法名 例如:
//参数1:context 参数2:java方法名,参数三:js里面写的方法名 参数4:方法的参数类型 个数最近在处理android webView与js的通信上的问题,作为总结
//添加js调用android的方法这是关键 前者是个对象,后者是个字符串 在js中是在window.android可以直接获取到 //这是开启js的调试下面再讲 //这个注解可以点击进去看官方描述 是 带有此注释的标记可用于JavaScript代码
js与android中的通信还是通过字符串来处理的
//真正发送给js 的方法 loadurl是异步加载所以如果在web为加载完成发送无效果
//此时已在主线程中,可以更新UI了
这是他的具体实现 代码不多 其中assets中的js文件是为了注入他的封装的js代码 他的交互方式与上面不同具体实现
//加载自己的js文件 ,然后别人的html调用它的js来传递消息 //callId为键,记录回调的集合 //本地注册一个方法名让js调用 //发送消息的对象,因为webview加载要时间所有他这里先用队里存储 //这就是他处理交互的另一个方式 //这里是是webview加载完成做到的操作 //在当前webview中加载一段自己的js文件然后我们看他的js代码
我们直接看他发送消息的代码
//这就是message队列 队列的原因后面会将
//js发送过来的数据分离出来相应的去处理
//将之前的message都序列出来一次发送到客户端
开启后 在chrome浏览器中 输入 然后能找到当前应用有个insert按钮
以上是jsbridge具体实现的思路
二者沟通的桥梁是WebView
对于Android调用JS代码的方法有2种:
对于JS调用Android代码的方法有3种:
对于Android调用JS代码的方法有2种:
// 设置与Js交互的权限 // 设置允许JS弹窗 // 注意调用的JS方法名要对应上 // 由于设置了弹窗检验调用结果,所以需要支持js对话框
- 为了方便展示,本文是采用Andorid调用本地JS代码说明;
- 实际情况时,Android更多的是调用远程JS代码,即将加载的JS代码路径改成url即可
特别注意:JS代码调用一定要在 onPageFinished()
回调之后才能调用,否则不会调用。
- 因为该方法的执行不会使页面刷新,而第一种方法(loadUrl )的执行则会。
// 只需要将第一种方法的loadUrl()换成下面该方法即可
//此处为 js 返回的结果
// 因为该方法在 Android 4.4 版本才可使用,所以使用时需进行版本判断 //此处为 js 返回的结果
对于JS调用Android代码的方法有3种:
// 定义JS需要调用的方法 // 由于对象映射,所以调用test对象等于调用Android映射的对象 // 设置与Js交互的权限仅将Android对象和JS对象映射即可
如果JS想要得到Android方法的返回值,只能通过 WebView 的
loadUrl ()
去执行 JS 方法把返回值传递回去,相关的代码如下:
在JS中,有三个常用的对话框方法:
下面的例子将用拦截 JS的输入框(即prompt()
方法)说明 :
- 常用的拦截是:拦截 JS的输入框(即
prompt()
方法)- 因为只有
prompt()
可以返回任意类型的值,操作最全面方便、更加灵活;而alert()对话框没有返回值;confirm()对话框只能返回两种状态(确定 / 取消)两个值
// 设置与Js交互的权限 // 设置允许JS弹窗 // 拦截输入框(原理同方式2) // 参数result:代表输入框的返回值 // 根据协议的参数,判断是否是所需要的url(原理同方式2) // 一般根据scheme(协议格式) & authority(协议名)判断(前两个参数) // 就解析往下解析参数 // 执行JS所需要调用的逻辑 // 可以在协议上带有参数并传递到Android上 //参数result:代表消息框的返回值(输入值) // 拦截JS的警告框 // 拦截JS的确认框
- 如果是拦截警告框(即
alert()
),则触发回调onJsAlert()
;
关于 WebView
的系列文章希望会对你有所帮助:
接下来我会继续讲解其他安卓开发的知识,有兴趣可以继续关注!!!!
不定期分享关于安卓开发的干货,追求短、平、快,但却不缺深度。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。