JavaScriptCore是Webkit的一个重要组成部分,主要是对JS进行解析和提供执行环境。iOS7后苹果在iPhone平台推出,极大的方便了我们对js的操作。我们可以脱离webview直接运行我们的js。iOS7以前我们对JS的操作只有webview里面一个函数stringByEvaluatingJavaScriptFromString
,JS对OC的回调都是基于URL的拦截进行的操作。大家用得比较多的是WebViewJavascriptBridge和EasyJSWebView这两个开源库,很多混合都采用的这种方式。
- 1.UIWebView加载完成注册Native代码
#pragma mark - UIWebViewDelegate
- (void)webViewDidFinishLoad:(UIWebView *)webView {
NSLog(@"webViewDidFinishLoad");
JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
[context evaluateScript:@"var arr = [3, 4, 'abc'];"];
[self addLocationWithContext:context];
}
- (void)addLocationWithContext:(JSContext *)context {
context[@"getLocation"] = ^() {
// 获取位置信息
···
// 将结果返回给js
NSString *locationStr = [NSString stringWithFormat:@"setLocation('%@')",@"广东省深圳市南山区高新南一道TCL大厦"];
[[JSContext currentContext] evaluateScript:locationStr];
};
}
- 2.JS调用OC
function locationClick() {
getLocation();
}