首页 / IOS / iOS-JS和OC的交互
iOS-JS和OC的交互
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了iOS-JS和OC的交互,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2694字,纯文字阅读大概需要4分钟。
内容图文
?1.OC调?用JS - OC传递数据给JS ?1> 利?用UIWebView的某个?方法执?行JS代码 ?NSString *result = [webView stringByEvaluatingJavaScriptFromString:js]; ?// result是执?行完JS代码后的返回值 ?// 其实也可以通过这个?方法办到:JS传递数据给OC ?2> 举例 ?NSString *username = @"zhangsan"; ?NSString *pwd = @"888888"; ?NSMutableString *js = [NSMutableString string]; ?[js appendString:@"function login(username, pwd) { alert(username + ‘-‘ + ?pwd);}"]; ?[js appendFormat:@"login(‘%@‘, ‘%@‘);", username, pwd]; ?// 在OC中调?用JS的函数(执?行JS代码)?[webView stringByEvaluatingJavaScriptFromString:js]; ?2.JS调?用OC - JS传递数据给OC /* 通用url的设计 协议固定: xxx: 一般有2个参数: 1> 方法名 2> 方法参数 */ NSString *onload = @"this.onclick = function() {"" window.location.href = ‘xxx:saveImageToAlbum:&‘ + this.src;""};"; [imgHtml appendFormat:@"<img onload=\"%@\" width=\"%d\" height=\"%d\" src=\"%@\">", onload, width, height, img.src]; #pragma mark - <UIWebViewDelegate> /** * 每当webView发送一个请求之前都会先调用这个方法 * * @param request 即将发送的请求 * * @return YES: 允许发送这个请求, NO: 禁止发送这个请求 */ - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSString *url = request.URL.absoluteString; // xxx:call:&10086 // xxx:sendMsg:body:&10086&2434 NSRange range = [url rangeOfString:@"xxx:"]; if (range.location != NSNotFound) { NSUInteger loc = range.location + range.length; NSString *path = [url substringFromIndex:loc]; // 获得方法和参数 NSArray *methodNameAndParam = [path componentsSeparatedByString:@"&"]; // 方法名 NSString *methodName = [methodNameAndParam firstObject]; // 调用方法 SEL selector = NSSelectorFromString(methodName); if ([self respondsToSelector:selector]) { // 判断方法的目的: 防止因为方法不存在而报错 NSMutableArray *params = nil; if (methodNameAndParam.count > 1) { // 方法有参数params = [NSMutableArray arrayWithArray:methodNameAndParam]; // 从数组中去掉方法名 [params removeObjectAtIndex:0]; } [self performSelector:selector withObjects:params]; } return NO; } return YES; } 这里用到 performSelector: withObjects 方法 传递多个参数: - (id)performSelector:(SEL)selector withObjects:(NSArray *)objects { NSMethodSignature *signature = [self methodSignatureForSelector:selector]; if (signature) { NSInvocation* invocation = [NSInvocation invocationWithMethodSignature:signature]; [invocation setTarget:self]; [invocation setSelector:selector]; for(int i = 0; i < [objects count]; i++){ idobject = [objects objectAtIndex:i]; [invocation setArgument:&object atIndex: (i + 2)]; } [invocation invoke]; if (signature.methodReturnLength) { id anObject; [invocation getReturnValue:&anObject]; return anObject; } else { return nil; } } else { return nil; } }
原文:http://www.cnblogs.com/DarbyCJ/p/4646530.html
内容总结
以上是互联网集市为您收集整理的iOS-JS和OC的交互全部内容,希望文章能够帮你解决iOS-JS和OC的交互所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。