JS与Objective-C交互(网页与原生交互---使用JavaScriptCore)
2016-09-26 17:46
453 查看
JS与OC的交互方式有三种:
第二种对于一些交互事件较少的点击事件,通过UIWebviewDelegate的代理方法进行拦截,获取服务器定义好的事件类型(或者方法名称等),进而进行相应的操作。
1、首先介绍一下获取JSContext中的js参数方法的封装(需要导入库<JavaScriptCore/JavaScriptCore.h>)
3、解析js数据
获得解析出来的字典后,至此js与oc交互已经基本大功告成,只需根据获得的dict进行相应的跳转等操作。
代码下载地址
1.UIWebviewDelegate
2.JavaScriptCore
3.WebViewJavascriptBridge
本文主要介绍第二种交互方式第二种对于一些交互事件较少的点击事件,通过UIWebviewDelegate的代理方法进行拦截,获取服务器定义好的事件类型(或者方法名称等),进而进行相应的操作。
1、首先介绍一下获取JSContext中的js参数方法的封装(需要导入库<JavaScriptCore/JavaScriptCore.h>)
/* 参数说明: webView :要进行JS交互的网页 urlStr :本网页的网址url paramStr : 与后台交互的标示 finished :block回调,成功后返回我们需要的数组valueArr */ +(void)webViewLoadHtml:(UIWebView *)webView htmlReuqstUrlStr:(NSString *)urlStr paramStr:(NSString *)paramStr isFinishedRequest:(void (^)(id))finished{ JSContext *content=[webView valueForKeyPath: @"documentView.webView.mainFrame.javaScriptContext"]; content[paramStr]=^(){ NSArray *args = [JSContext currentArguments]; NSMutableArray *valueArr=[NSMutableArray new]; for (JSValue *jsVal in args) { NSLog(@"--jsVal=%@",jsVal); [valueArr addObject:jsVal]; @try { } @catch (NSException *exception) { } @finally { } } if (finished) { finished(valueArr); } }; }2、在webview代理方法中获取交互需要的数据
#pragma mark - #pragma mark webview delegate - (void)webViewDidFinishLoad:(UIWebView *)webView { [HtmlRequestModel webViewLoadHtml:_DetailWebView htmlReuqstUrlStr:urlStr paramStr:@"axd" isFinishedRequest:^(id valueArr) { NSLog(@"valueArr=%@",valueArr); type=[valueArr[0] toString]; parasDic=[[NSDictionary alloc]init]; JSValue *jsVal=valueArr[1]; NSString *str11=[NSString stringWithFormat:@"%@",jsVal]; parasDic=[self dictionaryWithJsonString:str11];//解析成字典 [self chooseWhichWayToGo];//选择调用点击的哪个方法 NSLog(@"-----"); }]; self.title=[webView stringByEvaluatingJavaScriptFromString:@"document.title"]; } -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{ NSString *path=[[request URL] absoluteString]; urlStr=[[request URL] parameterString]; NSLog(@"webview path:%@",path); [webView stringByEvaluatingJavaScriptFromString:[NSString stringWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"test" withExtension:@"js"] encoding:NSUTF8StringEncoding error:nil]]; return YES; }
3、解析js数据
/*! * @brief 把格式化的JSON格式的字符串转换成字典 * @param jsonString JSON格式的字符串 * @return 返回字典 */ - (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString { if (jsonString == nil) { return nil; } NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; NSError *err; NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&err]; if(err) { NSLog(@"json解析失败:%@",err); return nil; } return dic; }
获得解析出来的字典后,至此js与oc交互已经基本大功告成,只需根据获得的dict进行相应的跳转等操作。
代码下载地址
相关文章推荐
- iOS 基于JavaScriptCore 不等webView加载完毕就交互,网页获取原生内容。 webView的高级用法之JS交互,js与oc的相互调用
- JS与Objective-C交互(网页与原生交互---使用UIWebviewDelegate)
- 使用JavaScriptCore实现OC和JS交互详解
- iOS中使用JSPatch框架使Objective-C与JavaScript代码交互
- iOS开发 - Swift使用JavaScriptCore与JS交互
- IOS中 使用JavaScriptCore 实现OC与JS的交互
- iOS与H5交互 H5与App原生交互,一般会是前端页面中的JavaScript与App使用的原生开发语言的交互。技术方案应能达到以下要求: 在js与原生进行交互的时候能保证正常的正向调用逻辑返回
- JS与OC交互(iPhone项目)中JavaScriptCore.framework的使用
- iOS开发 - Swift使用JavaScriptCore与JS交互
- IOS中 使用JavaScriptCore 实现OC与JS的交互
- 使用javascriptcore实现oc与js的交互
- 转载 【iOS开发】网页JS与OC交互(JavaScriptCore) OC ----->JS
- iOS开发:JavaScriptCore.framework的简单使用--JS与OC的交互篇
- web与js交互(WebViewJavascriptBridge使用)
- IOS7--javascriptcore中jscontext使用要注意的一点
- UIWebView 与 JS 交互(1):Objective-C 调用 Javascript
- iOS中使用JavaScriptCore实现Objective-C和JavaScript的相互调用
- [iOS] 使用WebViewJavascriptBridge实现OC与JS交互
- JS和Native交互之 - 运用JavaScriptCore框架进行交互
- iOS开发使用WebViewJavascriptBridge实现OC与JS交互