首先,个人觉得phonegap这样的设计是合理的,当你使用基于phonegap的应用程序,虽然用的是html+js,但是开发的却是本地应用了,所以在本地应用中遇到http协议的链接调用浏览器打开是合理的。
只是这种合理带来了不方便,尤其当你只用phonegap做一个壳,去浏览移动设备的网站时。使用jquerymobile可以解决这个问题,jqm会将本域内的http请求使用ajax传输,得到的结果再放入DOM中,个人推荐使用jqm的这种方式,处理灵活。
下面给一个一劳永逸的方式,网上目前我还没有搜到这种方式。
下面是类似官方的示例,其中phonegap我用的是apache的cordova
import android.os.Bundle;
import org.apache.cordova.*;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class WebViewer extends DroidGap{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
super.loadUrl("http://demo.wanban.cc/w3g");
}
}
在上面的基础上进行修改,将phonegap的webViewClient对象重新赋值一个新对象,并在新对象中重写shouldOverrideUrlLoading方法。
import android.os.Bundle;
import org.apache.cordova.*;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class WebViewer extends DroidGap{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
super.loadUrl("http://demo.wanban.cc/w3g");
super.webViewClient=new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url){
view.loadUrl(url);
return true;
}
};
}
}