简介
JavaScriptCore是iOS7引入的,用来方便OC与JS的交互,本文主要禅述JS调用OC方法。
使用
引入JavaScriptCore库
#import <JavaScriptCore/JavaScriptCore.h>
通过JSContext关联JS与OC代码。
在webView的webViewDidFinishLoad方法中获取JS运行上下文
self.context = [webView valueForKeyPath:@
"documentView.webView.mainFrame.javaScriptContext"
];
JS调用OC方法有两种:
一种是通过Block。
另一种是注册协议。好处是:为所有被JS调用的方法提供一个域,防止与其他代码混淆。另一个好处是方法前端同时适配android和iOS程序。
设置作用域
self.context[@"HongLingLin_APP"] = self;
创建一个协议,该协议中提供所有JS调用的方法。
@protocol TestJSExport <JSExport>
JSExportAs
(calculateForJS /** handleFactorialCalculateWithNumber 作为js方法的别名 */,
- (void)handleFactorialCalculateWithNumber:(NSNumber *)number
);
- (void)pushViewController:(NSString *)view title:(NSString *)title;
@end
实现TestJSExport
在webView的VC里面去设置
self.context[@"HongLingLin_APP"] = self;
并实现协议。
在JS中通过
HongLingLin_APP.pushViewControllerTitle(
'SecondViewController'
,
'secondPushedFromJS'
)
就会调用TestJSExport协议的具体方法。
参考资料
https://github.com/shaojiankui/JavaScriptCore-Demo.git
http://nscoder.me/blog/2014/04/11/JavaScriptCoreSample/