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