Objective-C与JS交互 —— JavaScriptCore

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();
            }

你可能感兴趣的:(Objective-C与JS交互 —— JavaScriptCore)