PhoneGap - 在程序内打开网页链接
用PhoneGap“伪装”Web App成Mobile App,第一件要做的事情就是避免“露馅” - 防止用户点击页面链接时候,会打开系统的新窗口。而恰恰PhoneGap在iOS和Android的默认情况下,新窗口都是采用移动终端自己的浏览器(Mobile Safari和Android Web View)进行渲染。
以下介绍的设置适用PhoneGap 1.4+版本,之前的版本没有经过测试。
iOS
首先要声明的是,用PhoneGap开发的App在iOS中默外部地址都会禁止访问。也就是说,用PhoneGap打包一个网页,如果页面里面含有链接到其他网站的地址的话,用户点击是无法正常访问的。 在目前版本的设置也相对简单,PhoneGap已经给出一个配置文件。在项目的“Supporting Files”目录,打开PhoneGap.plist文件,里面含有一个外部地址的白名单设置,一个ExternalHosts的数组,只要分别加入允许访问的网址就可加入白名单。同样还有另外一个Key为OpenAllWhitelistURLsInWebView的设置,如果设置为YES,那么所有白名单上的网站都可以在App的Web View里面打开。
Android
Android平台相对复杂一点,目前可以采用的一个做法是用自己的WebViewClient对象,并且重写shouldOverrideUrlLoading方法。如果有更简单的办法,还请告知。
首先,在layout/main.xml中里面加入一个WebView,如:
<WebView android:id="@+id/MyWebView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="none">
</WebView>
然后,新建一个class,并继承自WebViewClient类,如:
import android.webkit.WebViewClient;
import android.webkit.WebView;
public class MyClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//only open new browser when access protocal of ext://
if( url.contains("ext://") ) {
return false;
}
else {
view.loadUrl(url);
return true;
}
}
}
最后,在主类的onCreate方法里面加入这几行代码:
WebView myWebView = ((WebView)findViewById(R.id.MyWebView));
// Required to work with Javascript
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.setWebViewClient( new MyClient() );
myWebView.loadUrl("file:///android_asset/www/index.html");