Android端
App启动会调用Application的create方法,然后创建Main Activity,该Activity继承于CordovaActivity,启动Activity会调用onCreate方法,对window做一些设置,并设置webview布局。如图类调用关系:
![](https://img.haomeiwen.com/i4661743/c17187b06f32e32c.png)
然后调用super.loadUrl("file:///android_asset/www/index.html");
loadUrl函数会调用Init方法,创建一个CordovaWebView,并设置了CordovaWebViewClient和CordovaChromeClient。
在实例化CordovaWebView时,对PluginManager做了初始化工作,而在CordovaWebViewClient的onPageStarted方法里初始化并启动CallbackServer。
CordovaWebViewClient的onJsPrompt方法截获Web端的JavaScript消息,调用PluginManager的exce方法执行插件。
插件执行成功后调用CallbackServer的sendJavaScript方法给Js端返回回调Js代码。
js->native交互形式
![](https://img.haomeiwen.com/i4661743/c55774b7c0d239f9.png)
通过 prompt()和 Native 交互,Js代码如下:
![](https://img.haomeiwen.com/i4661743/f5bcf7221c81442e.png)
Native代码通过WebChromeClient拦截onJsPrompt回调,利用gap:开头标志得知是调用本地插件请求,然后向PluginManager转发该请求。PluginManager将会根据参数来查找并执行具体插件方法。
js层通过prompt向本地发送poll请求,本地将从CallBackServer中拿出下一个回调返回给js层。
Js与Native交互形式如下代码所示:
![](https://img.haomeiwen.com/i4661743/ce34ee39be2e4244.png)
网友评论