什么是JSBridge
由于Native和H5的各自特性,尤其的H5的易于部署的适用与双端的特点,使得为了满足业务的需要,公司实际项目的开发过程中往往会融合两者进行 Hybrid 开发。 JSBridge 是一种 JS 实现的 Bridge,连接着桥两端的 Native 和 H5。它在 APP 内方便地让 Native 调用 JS,JS 调用 Native ,是双向通信的通道。
为什么要做JSBridge
我们知道OC调用JS的方法可以通过Webview的evaluateJavaScript:completionHandler: 方法实现,但是解决不了异步问题,当JS需要执行一些耗时操作,就无法立即给OC返回相应结果。 同样JS调用OC的方法没有现成的方法,且也无法解决上面的异步问题。 所以JSBridge的出现,目的是解决OC与JS相互异步调用,且当其中有多个异步回调,要能处理好各回调之间的关系,能够做到类似CS架构。 这样能处理原先很多无法实现的能力,例如获取定位,相机拍照,手机传感器等等需要异步的接口调用能力。
怎么实现JSBridge
1.0版本
- JS调用Native,通过自定义跳转URL协议头(例如jsbridge://),并携带相应参数,Native拦截URL并解析来实现。
- OC调用Native,通过evaluateJavaScript:completionHandler: 且用runloop阻塞当前线程,直到返回结果
2端各维护一套响应回调和方法回调的映射表,从而实现在通信过程中,即使异步依然可以从映射表中查出回调地址。
流程图如下:
2.0版本
通过JavascriptCore实现,关于JSCore详见深入理解JSCore