最近公司有一个用h5写的项目要求要套用phonegap框架,现在项目差不多快完成了,做一些关于这个框架的小结,主要介绍如何在这个框架下用ios原生的代码和js的一些操作
1.首先是如何使用这个框架我们是在别人的项目上改建的,先把相应的html文件放到对应的www的文件下面。如果加载不出来看看你的root文件下面是不是缺少index.html文件如果没有记得添加进去,你的项目默认的登录显示的那个文件复制一份改成index.html,不删除源文件。
2.js代用iOS的代码:
只要在js文件下的对应位置添加依据代码即可:
window.mydiving_contactUs = (function () {
function start() {
var aa=‘010-46668881‘;
console.log(‘-----start-----‘);
$(‘li>img‘).bind(‘touchstart‘,function(){
var telnum=$(this).parent().find(‘em‘).text();
console.log(123,telnum);
//就是这句代码
cordova.exec(function(){},function(){},"UM_SharePlugin","print1",[aa]);
});
}
return {
start: start
}
})();
mydiving_contactUs.start();
这句话的意思就是在框架中调用UM_SharePlugin文件下的print1方法,如果要实现传参那就把相应的参数写到print1后面对应的[]里面如果传递参数比较繁琐请自行封装成字典再写入下面是在UM_SharePlugin.h下面的代码
#import <Foundation/Foundation.h>
#import <Cordova/CDVPlugin.h>
@interface UM_SharePlugin :CDVPlugin
//客服电话
- (void) print1:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options;
@end
#import "UM_SharePlugin.h"
@implementation UM_SharePlugin
- (void) print1:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options{
if(TARGET_IPHONE_SIMULATOR){
UIAlertView*al=[[UIAlertViewalloc]initWithTitle:@"必须真机环境"message:nildelegate:nilcancelButtonTitle:@"确定"otherButtonTitles:
nil];
[alshow];
}
[[NSNotificationCenterdefaultCenter]
postNotificationName:@"TELCalled"object:niluserInfo:@{@"key":arguments[1]}];
}
@end
在这个文件下发出通知在相应的mian文件下实现通知即可
#pragma mark-->TEL
-(void)TEL:(NSNotification*)note{
NSLog(@"call");
UIWebView*phoneCallWebView = [[UIWebViewalloc]
initWithFrame:CGRectZero];
NSString*aPhoneNumber=note.userInfo[@"key"];
NSURL *phoneURL = [NSURLURLWithString:[NSStringstringWithFormat:@"tel:%@",aPhoneNumber]];
[phoneCallWebViewloadRequest:[NSURLRequestrequestWithURL:phoneURL]];
[self.viewaddSubview:phoneCallWebView];
}
3.ios原生代码向js传参
首先js文件中要有获取ios代码传递参数的函数例如
function getcityid(cityname)
{
console.log(‘城市名称‘,cityname);
$("#city").text(cityname);
}
home_home.start();
其次是ios部分代码
- (void)viewWillDisappear:(BOOL)animated
{
[superviewWillDisappear:animated];
//通知名仅供测试,根据项目修改
if(city){
[[NSNotificationCenterdefaultCenter]
postNotificationName:@"post2JS"object:city];
}
}
下面是在main函数里面的代码部分
#pragma mark-->城市列表传参
//城市列表传参
[[NSNotificationCenterdefaultCenter]
addObserver:selfselector:@selector(post2JS:)name:@"post2JS"object:nil];
- (void)post2JS:(NSNotification*)note{
//使用alert注意此处最好延迟执行,否则可能程序卡死,未测试非延迟情况下传值问题,延迟执行成功
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1
* NSEC_PER_SEC)),dispatch_get_main_queue(), ^{
[self.webViewstringByEvaluatingJavaScriptFromString:[NSStringstringWithFormat:@"getcityid(‘%@‘)",note.object]];
});
}
这就实现了一个完整的传参。
4.在phonegap框架中使用js文件的时候加载html文件包的时候发现原有的点击事件关闭了,先检查一下对应的html文件下的语句是否含有下面的一句话
<script type="text/javascript" src="../../js/public/cordova.js"></script>
如果没有的话不妨把这句话加进去,说不定会解决你的问题。