1、首先,从iOS7开始苹果公布开始使用JavaScriptCore.framework进行JS与OC的交互,使得交互过程更加方便。所以首先要大致学习JavaScriptCore.framework框架,cocoachina中有一篇不错的文章,网址如下:JavaScriptCore框架学习
2、有一个试用JavaScriptCore.framework框架的博客讲解的好不错,可以初步入门,网址如下:博客第一篇、博客第二篇
3、学习JavaScript,至少要学会怎么使用,有几篇不错的博客:javascript入门经典学习笔记、javascript教程、javascript入门到精通
4、ios7之前oc与javascript的交互参考网址:旧的交互方式
a、以下是阅读JavaScriptCore框架学习时认为比较有用的信息
JSContext提供了类方法来获取参数列表(+ (JSContext *)currentContext;)和当前调用该方法的对象(+ (JSValue *)currentThis)。对于"this",输出的内容是GlobalObject,这也是JSContext对象方法- (JSValue *)globalObject;所返回的内容。因为我们知道在JavaScript里,所有全局变量和方法其实都是一个全局变量的属性,在浏览器中是window,在JavaScriptCore是什么就不得而知了。
Block可以传入JSContext作方法,但是JSValue没有toBlock方法来把JavaScript方法变成Block在Objetive-C中使用。毕竟Block的参数个数和类型已经返回类型都是固定的。虽然不能把方法提取出来,但是JSValue提供了- (JSValue *)callWithArguments:(NSArray *)arguments;方法可以反过来将参数传进去来调用方法。
JSValue还提供- (JSValue *)invokeMethod:(NSString *)method withArguments:(NSArray *)arguments;让我们可以直接简单地调用对象上的方法。只是如果定义的方法是全局函数,那么很显然应该在JSContext的globalObject对象上调用该方法;如果是某JavaScript对象上的方法,就应该用相应的JSValue对象调用。