Android端
? ? ?App啟動會調(diào)用Application的create方法,然后創(chuàng)建Main Activity,該Activity繼承于CordovaActivity,啟動Activity會調(diào)用onCreate方法,對window做一些設(shè)置,并設(shè)置webview布局。如圖類調(diào)用關(guān)系:

然后調(diào)用super.loadUrl("file:///android_asset/www/index.html");
loadUrl函數(shù)會調(diào)用Init方法,創(chuàng)建一個CordovaWebView,并設(shè)置了CordovaWebViewClient和CordovaChromeClient。
在實例化CordovaWebView時,對PluginManager做了初始化工作,而在CordovaWebViewClient的onPageStarted方法里初始化并啟動CallbackServer。
CordovaWebViewClient的onJsPrompt方法截獲Web端的JavaScript消息,調(diào)用PluginManager的exce方法執(zhí)行插件。
插件執(zhí)行成功后調(diào)用CallbackServer的sendJavaScript方法給Js端返回回調(diào)Js代碼。
js->native交互形式

通過 prompt()和 Native 交互,Js代碼如下:

Native代碼通過WebChromeClient攔截onJsPrompt回調(diào),利用gap:開頭標(biāo)志得知是調(diào)用本地插件請求,然后向PluginManager轉(zhuǎn)發(fā)該請求。PluginManager將會根據(jù)參數(shù)來查找并執(zhí)行具體插件方法。
js層通過prompt向本地發(fā)送poll請求,本地將從CallBackServer中拿出下一個回調(diào)返回給js層。
Js與Native交互形式如下代碼所示:
