最近在给公司做一个JS-Native的SDK,就是用于JS和原生之间的交互。
使用场景上主要还是webView,那么原先的url拦截的方式已经不再考虑,我们使用了iOS7之后的JavaScriptCore.framework。
总体来说,苹果的JavaScriptCore的API是非常易用的,主要操作步骤如下:
1.获取一个JSContext。
_jsContext = [_webView valueForKeyPath:
@"documentView.webView.mainFrame.javaScriptContext"];
2.处理某个JS端调起的方法,比如log
_jsContext[@"log"] = ^() {
NSArray *args = [JSContext currentArguments];
for (id obj in args) {
//需要注意这里的obj都还是JSValue
NSLog(@"%@",obj);
}
};
3.调用JS端执行某个JS方法
[_jsContext
evaluateScript:@"log('arg1')"];
[_jsContext
evaluateScript:@"logCallback('arg1')"];
4.重定义某个JS端的方法(其实和3是一种,不过特殊了点)