OC与JS交互

以前一直是通过拦截Url的方式来进行OC与JS的交互,也一直知道苹果在iOS7的时候出了一个JavaScriptCore框架,但一直没有使用。今天打算学习一下,并记录供以后翻阅。

1.要引入头文件

#import

2.自定义协议JSDelegate,必须要遵守JSExport这个协议

@protocol JSDelegate

- (void)result:(NSString *)msg;

@end

3.在UIWebview的回调方法- (void)webViewDidFinishLoad:(UIWebView *)webView 中获取JSContext上下文,然后再注入桥梁对象名为Custom,承载的对象为self即为此控制器,控制器遵守此自定义协议实现协议中对应的方法

#pragma mark - UIWebViewDelegate

- (void)webViewDidFinishLoad:(UIWebView *)webView {

NSLog(@"webViewDidFinishLoad");

self.jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

self.jsContext[@"Custom"] = self;

[self.jsContext setExceptionHandler:^(JSContext *context, JSValue *value) {

context.exception = value;

NSLog(@"异常信息: %@", value);

}];

}

#pragma mark - JSDelegate

- (void)result:(NSString *)msg {

NSLog(@"%@", msg);

JSValue *callback = self.jsContext[@"callback"];

[callback callWithArguments:nil];

}

这样基本上OC就可以跟JS来交互了,注意自定义协议的方法名称要与web前端定义的一致,因为在web前端是通过桥梁对象名Custom.result(msg)来调用的,OC向JS传值是通过JSValue的callWithArguments方法来进行的,具体请查看完整Demo。

Github地址

你可能感兴趣的:(OC与JS交互)