欢迎来到天天文库
浏览记录
ID:8970443
大小:87.00 KB
页数:8页
时间:2018-04-13
《ios开发中使用javascriptcore实现objective-c和javascript的相互调用》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、http://www.mobiletrain.org/iOS开发中使用JavaScriptCore实现Objective-C和JavaScript的相互调用最近看了一个对Github上面编程语言使用统计的[排行榜](http://githut.info/),JavaScript真可以说是一枝独秀,很难想象20年前,这个语言只是浏览器中的装饰性语言,能做的事情也就是一点特效或者检查一下要提交给服务器的表单是否满足要求。今天的JavaScript已经是一个全栈语言,从客户端到服务器无所不在。很多编程语言都提供了跟JavaScript进行交互的接口,这一点在iOS开发中也不例外。iOS7以前
2、,在App中调用JavaScript的方式只有一种,就是通过UIWebView对象的stringByEvaluatingJavaScriptFromString:方法。由于UIWebView中包含了CSS渲染引擎和JavaScript执行引擎(说白了就是微型一个浏览器),因此这个方法可以让UIWebView通过它的JavaScript运行时环境执行JavaScript代码,但是能做的事情非常有限,我们可以先看看下面的例子。-(void)webViewDidFinishLoad:(UIWebView*)webView{//获得UIWebView中加载页面的标题NSString*title
3、=[webViewstringByEvaluatingJavaScriptFromString:@"document.title"];NSLog(@"%@",title);//获得UIWebView中加载页面的链接地址NSString*urlStr=[webViewstringByEvaluatingJavaScriptFromString:@"location.href"];NSLog(@"%@",urlStr);}从iOS7开始,我们可以使用JavaScriptCore框架来让我们的Objective-C代码和北京千锋互联科技有限公司版权所有http://www.mobiletra
4、in.org/JavaScript进行深度交互,简单的说我们可以在Objective-C代码中访问JavaScript中的变量或调用JavaScript的函数,也可以JavaScript中使用Objective-C的对象和方法。我们可以先看一个简单的例子。先加入JavaScriptCore的头文件。#import在Objective-C中使用JavaScript的正则表达式验证字符串。//创建JavaScript执行环境(上下文)JSContext*context=[[JSContextalloc]init];NSStr
5、ing*funCode=@"varisValidNumber=function(phone){""varphonePattern=/^1[34578]\d{9}$/;""returnphone.match(phonePattern);""};";//执行上面的JavaScript代码[contextevaluateScript:funCode];//获得isValidNumber函数并传参调用JSValue*jsFunction=context[@"isValidNumber"];JSValue*value1=[jsFunctioncallWithArguments:@[@"1301
6、2345678"]];NSLog(@"%@",[value1toBool]?@"有效":@"无效");//有效北京千锋互联科技有限公司版权所有http://www.mobiletrain.org/JSValue*value2=[jsFunctioncallWithArguments:@[@"12345678899"]];NSLog(@"%@",[value2toBool]?@"有效":@"无效");//无效在Objective-C中调用JavaScript函数求阶乘。//创建JavaScript执行环境(上下文)JSContext*context=[[JSContextalloc]in
7、it];//可以将一个block传给JavaScript上下文//它会被转换成一个JavaScript中的函数context[@"factorial"]=^(intx){doubleresult=1.0;for(;x>1;x--){result*=x;}returnresult;};//执行求阶乘的函数[contextevaluateScript:@"varnum=factorial(5);"];JSValue*num=context[@"nu
此文档下载收益归作者所有