转了一圈又回到了原生的,有一个库叫JavaScriptCore,这个是IOS7以后才开放的API,这可以极大的简化了我们的需求,非常的简单,
我们只需要注入一个方法,就可以在JS中调用此方法来跟原生的OC交互。
首先得加入库
- #import <JavaScriptCore/JavaScriptCore.h>
JSContext这个可是关键。
- // webView对象
- @property (nonatomic, strong, readonly) UIWebView *webView;
- @property (nonatomic, strong, readonly) JSContext *jsContext;
下面是在webview加载完成后, 关联JS与OC:
if (_jsContext == nil) {
// 1.
_jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
// 2. 关联打印异常
_jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) {
context.exception = exceptionValue;
NSLog(@"异常信息:%@", exceptionValue);
};
_jsContext[@"activityList"] = ^(NSDictionary *param) {
DDLogVerbose(@"%@", param);
};
// Mozilla/5.0 (iPhone; CPU iPhone OS 10_10 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B411
id userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
NSLog(@"%@", userAgent);
}
}
上面
activityList是商定好的方法名称,在JS中写法:
h5:
<input type="button" value="测试log" οnclick="activityList({'tytyty':'hehe'})" />