在网上查了很久,终于弄明白是怎么回事了。下面是自己的一些总结,主要有两部分:原理和使用问题。
打算不久后,写一个kotlin版的,github开源的jsbridge下载下来各种类找不到。
不当之处,还请多多指正。
1.jsbridge原理
1.1 创建jsbridge桥
主要包括三个方法:
1.regersterhandler:h5调用此方法注册方法,之后native可以调到该方法,并讲方法保存在本地集合中
2.callhandler:h5通过该方法调用native方法,并存储回调函数和callbackid
3.handlemessgefromnative:native调用h5方法或者通知h5页面执行回调方法
1.2 js调用native方法
0.native注册要被调用的方法,key为方法方法名,value为匿名内部类,保存到native方法集合中
1.js调用callhandler方法,将要调用的native方法、参数、回调id拼接成url scheme
2.native通过shouldoverrideurlloading拦截url scheme,解析数据,获取到要调用的方法名
3.根据方法名从native方法集合中获取到对应的方法并执行
4.执行完毕,将返回值和h5的callbackid一块传递给jsbridge,jsbridge根据callbackid从回调集合中获取真正的回调,
将数据传入并执行。
1.3 native调用js方法
0.h5在调用regersterhandler方法,注册可以被native调用的方法
1.native将要传入h5方法名、参数、回调函数转化成json数据,并获取callbackid,将回调函数保存到集合中,
之后native直接使用原生调用方法,调用jsbridge的handlemessgefromnative方法
2.jsbridge出发h5对应的方法
3,h5方法执行完毕,会返回一个url
4.native通过拦截url,并判断该url类型是否为native调用h5方法后的相应数据,
如果是,则通过传过来的native的callbackid,从回调集合中获取对应的回调函数并执行。
2.问题
2.1 为什么要使用jsbridge?
1.统一Android、ios两端和h5交互接口
2.简化本地和h5交互步骤
3.兼容4.2 js调用native时的漏洞问题
2.2 jsbridge是什么?怎么用?
1.是一种思想,它是native和h5交互的桥梁
2.根据框架提供的文档进行调用即可
2.3 框架里面的js文件是做什么用的?
1.h5注册方法和调用native方法、native调用h5中js方法
2.放在本地即可,h5可以加载到
2.4 有没有其他的桥接方式?
如果不考虑android4.4,可以在js调用native的时候,使用原生方法,写一个h5返回数据的方法,
一个调用nativef的方法
参考文章:
JSBridge 深度剖析(ps.就是看这篇文章然后对照网上JSBridge框架源码搞懂的)