最近需要做Native同js的交互,所以就特意去查找了写资料学习了一下Native同js交互的相关知识。对几种常用的方式做了如下的整理和分析:
一、 Native监听js的alert、confirm、prompt方法
Android端、IOS端均在监听回调中处理alert、confirm或者prompt,解析出含义预定好的标识后按逻辑做出处理。
优点:技术难度低,实现容易。
缺点:需要Native端和js前端两端均新增逻辑;仅支持js调用原生方法,无法获取返回值。
二、 Native通过拦截url请求,获取参数及处理对应逻辑
Android端和IOS端在url请求回调中去拦截处理特定url,并获取相关参数,做相关的逻辑处理。
优点:开发难度低,实现简单;不需要js端在特殊处理,只需要Native端定义要拦截处理的url即可。
缺点:同样只是js调用Native单向,不支持返回值;
三、 Native通过webView设置代理对象实现交互
Native端通过给WebView设置一个代理对象,然后js通过对象直接调用Native方法;
优点:扩展性更强,且能为js提供返回值;维护修改成本低
缺点:js需要对Native端在单独适配工作,增加逻辑方法;仍然是单向调用,Native调用js方法需要通过其他方式调用,一般不能返回数值。
四、 Native通过JsBridge来和js进行交互
通过封装的jsBridge来实现js和Native之间的调用和数据传递。
优点:功能强大,双向调用均可以在框架内完成;双向调用都可以获得返回值;并且可以为方法添加异步的回调,能够实现更为复杂的交互和需求。
缺点:需要Native端和Js均做开发,而且IOS、Android和js需要分别单独去学习JSBridge知识。开发周期和学习成本相对较高,开发难度相对较大,不太适合在轻量需求下使用。