安装PhoneGap
现在使用PhoneGap非常方便,只需要安装node,用简单的命令就能完成安装和使用的工作。
安装PhoneGap:
- sudo npm install -g phonegap
创建phoneGap应用:
- phonegap create my-app
- cd my-app
- phonegap run ios
具体可看
phonegap官网进行学习。
PhoneGap与Cordova的关系
Cordova是PhoneGap贡献给Apache后的开源项目,是从PhoneGap中抽离出的核心代码,是驱动PhoneGap的核心引擎。有点类似Webkit和Google Chrome的关系。
渊源就是:早在2011年10月,Adobe收购了Nitobi Software和它的PhoneGap产品,然后宣布这个移动Web开发框架将会继续开源,并把它提交到Apache Incubator,以便完全接受ASF的管治。当然,由于Adobe拥有了PhoneGap商标,所以开源组织的这个PhoneGap v2.0版产品就更名为Apache Cordova。
为什么说这个?因为下面的文章中,会出现Cordova这个命令,大家不要觉得奇怪。
js与native通信的原理
但在切入正题前,需要先了解下iOS js与native通信的原理。了解这个原理,是理解PhoneGap代码的关键。
具体可以看我之前写的
iOS Js与native相互通信,这里做简单说明。
js –> native
在iOS中,js调用native并没有提供原生的实现,只能通过UIWebView相关的UIWebViewDelegate协议的
- - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
方法来做拦截,并在这个方法中,根据url的协议或特征字符串来做调用方法或触发事件等工作,如
- /*
- * 方法的返回值是BOOL值。
- * 返回YES:表示让浏览器执行默认操作,比如某个a链接跳转
- * 返回NO:表示不执行浏览器的默认操作,这里因为通过url协议来判断js执行native的操作,肯定不是浏览器默认操作,故返回NO
- * /
- - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
- NSURL *url = [request URL];
- if ([[url scheme] isEqualToString:@"callFunction") {
- //调用原生方法
- return NO;
- } else if (([[url scheme] isEqualToString:@"sendEvent") {
- //触发事件
- return NO;
- } else {
- return YES;
- }
- }
值得注意的是,通过这个方式,js调用native是异步的。