原理
参考链接github地址
-
前端通过WKWebview文本传入传递约定的方法名与参数
代理方法:runJavaScriptTextInputPanelWithPrompt
-
原生定义接口类,统一管理api,方法名和参数与前端约定好的
当前端调用原生时,遍历这个类里的方法,寻找对应方法名并执行这里相对于JSBridge:JSBridge是通过注册方法作为缓存,当调用方法时,在缓存信息中查找对应注册的方法名去执行
DSBridge:DSBridge是通过注册API类,当调用方法时,遍历这个类中的方法名查找对应注册的方法名去执行
当注册的方法多了之后,每次都会去遍历这个类里的方法,去查找,可能也会存在耗时操作消耗内存问题 -
原生通过向前端注入js方式传递信息
evaluateJavaScript
DWKWebview
- 继承WKWebView
- 实现WKUIDelegate(实际也是WKWebView的UIDelegate)
API支持
- loadUrl
- callHandler:evaluateJavaScript
- addJavascriptObject:注入原生实现的介绍对象,在收到前端消息时通过约定方法名使用runtime(class_copyMethodList)获取缓存原生对象方法列表,在通过消息转发机制实现调用原生
总结
与jSBridge对比
优势:
- 没有jsapi提前注入,注入的api接口类
- DSBridge在消息传递上采用方法名约定的形式,对比jsbridge是提前注册方法作为缓存,交互方式会相对简单便捷
劣势:
- 但正因为是方法名约定的形式,调用时使用runTime的消息转发,在排查定位问题上难度大,不易定位问题
- 前端传入的方法参数只能是字符串,数据类型有限制