PhoneGap loadUrl监听

来源:互联网 发布:java快速排序简单代码 编辑:程序博客网 时间:2024/06/10 23:33

最近有个外包项目,需要用到PhoneGap,之前对Cordova和PhoneGap两者的关系有点错乱,做了这个项目才知道他们的关系。Cordova是Phonegap的儿子,但是对于商业用途来说,我还是建议大家使用PhoneGap,因为PhoneGap的代码结构比Cordova更加简洁,市面上的招聘也是招PhoneGap居多。

用PhoneGap来load url,可能是大部分项目都是用JQuery Mobile存在放本地作为资源,所以加载速度比较快,这个加载的等待提示很容易被忽略。尤其是,需要加载网络上的地址的时候。

参考了这篇博文:http://blog.csdn.net/tommychen1228/article/details/8788340 发现Log的方法没有被调用,我以为在onStarted等方法里面不可以打印日志,可能跟浏览器有关,于是我找到了一个兼容4.0以上的版本用了一个IceCreamCordovaWebViewClient去兼容,结果发现,在4.0+的系统根本不调用IceCreamCordovaWebViewClient。

使用了自己定义的布局,当然要使用CordovaWebView。

<org.apache.cordova.CordovaWebView     android:id="@+id/tutorialView"     android:layout_width="match_parent"     android:layout_height="match_parent" />


折腾了一番终于发现了问题,原来这个监听信息的传递需要需要通过webview自身的postMessage来实现。

            @Override            public void onPageStarted(WebView view, String url, Bitmap favicon) {            //we use CordovaWebView postMessage() to CordovaInterface             //like handle to get what CordovaWebView has sent            //post format like message_id,content                webView.postMessage("onPageStarted ", url);                super.onPageStarted(view, url, favicon);            }
发送消息有了,则需要获取这个发送的消息,需要实现CordovaInterface的Object onMessage(String id, Object data)方法,特别要注意的是,当data为空的时候,打印信息会报错。

        @Overridepublic Object onMessage(String id, Object data) {//here is for get the data what CordovaWebView has sent //rememeber to check if data is not null//becuz when CordovaWebView has been destoryed it still post a null message like about:blankif(data!=null){Log.e("post message",data.toString()+" "+id);}return data;}


除此之外,关闭activity时如果没有清空webview相关的资源,会报错,一定要记得加上

        @Overrideprotected void onDestroy() {//remember to cleanup all PhoneGap related stuff//handleDestroy() will cleanup stuff like the PluginManager, broadcast receiversif(webView!=null){ webView.handleDestroy();}super.onDestroy();}


项目代码:https://github.com/arjinmc/PhoneGapDemo


0 0
原创粉丝点击