在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方法