Hybrid
方案:
h5 容器 & 小程序
原理:
- js 与 native 通信,jsbridge, 核心 webview
- Native > webview > h5
方式:
- webview url scheme 跳转拦截
- api 注入: native 获取js上下文环境, 直接在context上挂载对象or方法,供js调用
- webview prompt 拦截
中间url 拦截实现原理:
-
webview 中发出的网络请求, native 端都能监听
-
协议定制 定义一套 URL Scheme 规则。 比如: jego.com://getxxx?id=1, jego.com://openxxx?id=1
- 创建iframe 发送请求:
- 设置域名白名单: 安全考虑,防止三方调用
- 协议拦截
-
native 通过对webview 的请求进行拦截:
-
iOS: shouldStartLoadWithRequest
-
android: shouldOverrideUrlLoading
获取到url, 判断如果为自定义协议,则进行拦截, 解析参数,并调用相关原生Api;
- 协议回调
- 网络请求是一个异步过程,回调也是异步。
- 利用js 事件系统,window.addEventListener & window.dispatchEvent
- 发送请求,注册自定义事件
- native侧处理后,通过jsbridge 调用 window.dispatchEvent ,回调data
痛点
优化
像我们的做法是让客户端下载一个zip包进行解压前端资源。当资源过期或者解析出错的时候走线上。
作用
- 安全加密。 native可以代理web 发出的请求,然后转发进行加密、解密,签名校验。