很久之前用的互相调用的方法,今天要分享下,故记录下
Objective-C,通常写作ObjC或OC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言。
JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。
UIWebView用于在App中嵌入网页内容,通常情况下是html格式的网页,也支持pdf, word等文档。
控件优点
可跨平台
开发一次可以部署iOS、Android等平台。发布更新快
在服务器端发布,能够实时更新终端展示,便于快速升级以及紧急修复bug。排版布局能力强
强大的HTML+CSS让人膜拜
控件缺点
性能
Native先生与HTML5先生争论时最喜欢说的一句话就是:“你性能不行”。Web App运行在浏览器里,浏览器的开放能力难以支持HTML5与Native对抗。数据通讯复杂
UIWebView与App之间进行数据通讯只能通过javascript或者UIWebViewDelegate来进行,客户端想传参数给UIWebView修改网页或者从网页中获取数据都比较复杂。
使用场景
排版复杂的内容
需后台灵活控制的界面
原网页
1.加载网页
UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
// 获取网络请求
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.baidu.com"]];
// 加载请求
[webView loadRequest:request];
[self.view addSubview:webView];
2.js调oc
网页中的点击方法可以调起原生页面
/**
- 拦截URL js调用oc
- @param webView
- @param request
- @param navigationType
- @return
*/
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType: (UIWebViewNavigationType)navigationType {
NSString *url = [request.URL absoluteString];
if ([url isEqualToString:@"attachment:Upload"]) {
ALCStudentInfoUpLoadViewController *upLoad = [[ALCStudentInfoUpLoadViewController alloc] init];
upLoad.delegate = self;
[self.navigationController pushViewController:upLoad animated:YES];
return NO;
}
return YES;
}
js中写法
<button type="button" onclick="did();">google</button>
function did()
{
window.location.href = 'jsToOC:success';
}
3.oc调js
原生调用js方法,也可把参数传递给js
/**
- 返回附件参数的代理
- @param array
*/
- (void)didBackButtonWithArray:(NSMutableArray *)array {
NSMutableDictionary *jsParame = [NSMutableDictionary dictionary];
jsParame[@"NewFileList"] = array;
NSString *parame = CodeDictionaryToJsonString(jsParame);
NSString *parameF = [parame stringByReplacingOccurrencesOfString:@" " withString:@""];
NSString *parameS = [parameF stringByReplacingOccurrencesOfString:@"\n" withString:@""];
NSString *js = [NSString stringWithFormat:@"cacheAttachMentInfo('%@','%d');", parameS, false];
[self.webView stringByEvaluatingJavaScriptFromString:js];
}
js中写法
function cacheAttachMentInfo(ssss, yyy)
{
alert(ssss);
}