WebView(四)—— JSBridge原理

JSBridge原理

JSBridge很早就出现在软件开发中,在一些桌面软件中很早就运用了这样的形式,多用在通知、产品详情、广告等模块中,然后这些模块中,使用的是Web UI,而相关按钮点击后,调用的是Native功能。现在移动端盛行,不管是Hybrid应用,还是React-Native都离不开JSBridge,当然也包括在国内举足轻重的微信小程序。

bridge [brɪdʒ] 桥;桥牌

JsBridge

1 JSBridge的起源

主要的原因还是因为JavaScript主要载体Web是当前世界上的最易编写 、 最易维护 、最易部署的UI构建方式。工程师可以用很简单的 HTML标签和CSS样式快速的构建出一个页面,并且在服务端部署后,用户不需要主动更新,就能看到最新的UI展现。

开发维护成本和更新成本较低的Web技术成为混合开发中几乎不二的选择,而作为Web技术逻辑核心的JavaScript也理所应当肩负起与其他技术『桥接』的职责,并且作为移动不可缺少的一部分,任何一个移动操作系统中都包含可运行JavaScript的容器,例如WebViewJSCore。所以,运行JavaScript不用像运行其他语言时,要额外添加运行环境。因此,基于上面种种原因,JSBridge应运而生。

移动端混合开发中的JSBridge,主要被应用在两种形式的技术方案上:

  • 基于WebHybrid解决方案:例如微信浏览器、各公司的Hybrid方案
  • 非基于Web UI但业务逻辑基于JavaScript的解决方案:例如React-Native

微信小程序基于Web UI,但是为了追求运行效率,对UI展现逻辑和业务逻辑的JavaScript进行了隔离。因此小程序的技术方案介于上面描述的两种方式之间。

2 JSBridge的用途

JSBridge就像其名称中的Bridge的意义一样,是Native和非Native之间的桥梁,它的核心是构建Native和非Native间消息通信的通道,而且是双向通信的通道。 简单来讲,主要是给JavaScript提供调用Native功能的接口,让混合开发中的前端部分可以方便地使用地址位置、摄像头甚至支付等Native功能。

通信

双向通信的通道:

  • JSNative发送消息:调用相关功能、通知Native当前JS的相关状态等。
  • NativeJS发送消息:回溯调用结果、消息推送、通知JS当前Native的状态等。

3 JSBridge的实现原理

JavaScript是运行在一个单独的JS Context中(例如,WebViewWebkit引擎、JSCore)。由于这些Context与原生运行环境的天然隔离,我们可以将这种情况与RPCRemote Procedure Call,远程过程调用)通信进行类比,将NativeJavaScript的每次互相调用看做一次RPC调用。

remote [rɪˈmoʊt] 边远的 procedure [prəˈsiːdʒər] 手续,步骤

JSBridge的设计中,可以把前端看做RPC的客户端,把Native端看做RPC的服务器端,从而JSBridge要实现的主要逻辑就出现了:通信调用(NativeJS通信)和句柄解析调用。

4 JSBridge的通信原理

4.1 JavaScript调用Native

JavaScript调用Native的方式,主要有两种:注入API和拦截URL SCHEME

4.1.1 注入API

注入API方式的主要原理是,通过WebView提供的接口,向JavaScriptContextwindow)中注入对象或者方法,让JavaScript调用时,直接执行相应Native代码逻辑,达到JavaScript调用Native的目的。

https://blog.csdn.net/xingyu19911016/article/details/121293421 2.1相关内容

Android 4.2之前,Android注入JavaScript对象的接口是addJavascriptInterface,但是这个接口有漏洞,可以被不法分子利用,危害用户的安全,因此在Android 4.2中引入新的接口@JavascriptInterface(上面代码中使用的)来替代这个接口,解决安全问题。所以Android注入对对象的方式是有兼容性问题的。

4.1.2 拦截URL SCHEME

URL SCHEME是一种类似于url的链接,是为了方便APP直接互相调用设计的,形式和普通的url近似,主要区别是protocolhost一般是自定义的,例如:qunarhy://hy/url?url=ymfe.techprotocolqunarhyhost则是hy

拦截URL SCHEME的主要流程是:Web端通过某种方式(例如iframe.src)发送URL SCHEME请求,通过shouldOverrideUrlLoading来拦截约定规则的url

https://blog.csdn.net/xingyu19911016/article/details/121293421 2.2相关内容

在时间过程中,这种方式有一定的缺陷:

  • 发送URL SCHEME会有url长度的隐患。
  • 创建请求,需要一定的耗时,比注入API的方式调用同样的功能,耗时会较长。
4.2 Native调用JavaScript

https://blog.csdn.net/xingyu19911016/article/details/121293421 1相关内容

5 JsBridge的优点

  • JavaScript端可以确定JSBridge的存在,直接调用即可
  • H5同时适配AndroidiOS两个平台
  • javajs的交互存在一些安全漏洞

参考

https://juejin.cn/post/6844903585268891662#heading-0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值