在ios中,cordova的CDVViewController繼承了viewController,每一個h5的頁面,都對應一個CDVVIewController,
里面都有一個webview,是ios中專門顯示h5頁面的view.
h5和原生端的交互,主要是通過插件的形式實現,原生這邊寫一個類繼承CDVPlugin,然后實現方法,js那邊封裝好每個接口的方法,
最終通過調用cordova.js里的exec,傳入服務類名,方法名,以及回調函數及參數等進行調用。
它的通訊原理是:有兩種方法
1、通過iframe,cordova.exec函數里通過向Html插入一個不可見的iframe,從而會向UIWebView請求加載一個特殊的URL,
url里包括了plugin插件的類名,方法名。
由於請求了url,這時會觸發UIWeibviewDegate的shouldStartLoadWithRequest
這里會進入原生則,原生通過request獲取類名和方法名進行處理
2、通過XHR,cordova.exec通過發起一個xhr請求,這時候就會被NSURLProtocol攔截
原生的canInitWithRequest就會被調用,從而進入到原生
原生調用js的方法,是直接通過stringByEvaluatingJavaScriptFromString直接調用js方法