在ios中,cordova的CDVViewController继承了viewController,每个h5的页面,都对应一个CDVVIewController,ios
里面都有一个webview,是ios中专门显示h5页面的view.web
h5和原生端的交互,主要是经过插件的形式实现,原生这边写一个类继承CDVPlugin,而后实现方法,js那边封装好每一个接口的方法,函数
最终经过调用cordova.js里的exec,传入服务类名,方法名,以及回调函数及参数等进行调用。lua
它的通信原理是:有两种方法url
一、经过iframe,cordova.exec函数里经过向Html插入一个不可见的iframe,从而会向UIWebView请求加载一个特殊的URL,插件
url里包括了plugin插件的类名,方法名。cordova
因为请求了url,这时会触发UIWeibviewDegate的shouldStartLoadWithRequest继承
这里会进入原生则,原生经过request获取类名和方法名进行处理接口
二、经过XHR,cordova.exec经过发起一个xhr请求,这时候就会被NSURLProtocol拦截ip
原生的canInitWithRequest就会被调用,从而进入到原生
原生调用js的方法,是直接经过stringByEvaluatingJavaScriptFromString直接调用js方法