PhoneGap loadUrl监听

最近有个外包项目,需要用到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为空的时候,打印信息会报错。

        @Override
	public 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:blank
		if(data!=null){
			Log.e("post message",data.toString()+" "+id);
		}
		
		return data;
	}


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

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


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值