1. Cordova 分析
1.1. Cordova-Android
1.1.1. Web > Native
实现过程
Cordova-Android 监听 JS
SystemExposedJsApi exposedJsApi = new SystemExposedJsApi(bridge);
webView.addJavascriptInterface(exposedJsApi, "_cordovaNative");
Web > Web 插件
Web 调用 Web 插件自定义的函数
Web 插件 > Cordova-Android
cordova.exec()
Cordova-Android > Native 插件
window._cordovaNative.exec() > SystemExposedJsApi.exec()
Native 插件 > Cordova-Android
execute()
Cordova-Android > Web
执行 Web 定义的 Callback
SystemExposedJsApi.execute() > callbackContext.sendPluginResult(r)
1.2. Cordova-iOS
1.2.1. Web > Native
实现过程
Cordova-iOS 注册 Native 插件
把 Native 插件中继承 CDVPlugin 的类注册到 Cordova
Web > Web 插件
Web 调用 Web 插件自定义的函数
Web 插件 > Cordova-iOS
cordova.exec()
Cordova-iOS > Native 插件
exec.js 的 pokeNative() 以 iframe 方式发送请求 > UIWebViewDelegate 的 shouldStartLoadWithRequest 监听请求 > CDVPlugin
Native 插件 > Cordova-iOS
- 继承
CDVPlugin
的类实现Web 插件
定义的方法 - 调用
CDVCommandDelegate
的- (void)sendPluginResult:(CDVPluginResult*)result callbackId:(NSString*)callbackId
方法实现回调