Objective-C与JS交互 —— JavaScriptCore

JavaScriptCore是Webkit的一个重要组成部分,主要是对JS进行解析和提供执行环境。iOS7后苹果在iPhone平台推出,极大的方便了我们对js的操作。我们可以脱离webview直接运行我们的js。iOS7以前我们对JS的操作只有webview里面一个函数stringByEvaluatingJavaScriptFromString
,JS对OC的回调都是基于URL的拦截进行的操作。大家用得比较多的是WebViewJavascriptBridgeEasyJSWebView这两个开源库,很多混合都采用的这种方式。

  • 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();
            }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容