最近需要做Native同js的交互,所以就特意去查找了写资料学习了一下Native同js交互的相关知识。对几种常用的方式做了如下的整理和分析:

一、 Native监听js的alert、confirmprompt方法

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知识。开发周期和学习成本相对较高,开发难度相对较大,不太适合在轻量需求下使用。