iOS js oc相互调用(JavaScriptCore)(二)
js调用OC:
① 直接调用方法
② 通过对象调用方法
第一种:
-(void)webViewDidFinishLoad:(UIWebView *)webView {
//首先创建JSContext 对象(此处通过当前webView的键获取到jscontext)
JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
// MethodName是js的方法名称
//此方法最终将打印出所有接收到的参数,js参数是不固定的 我们测试一下就知道
context[@"MethodName"] = ^() {
NSArray *args = [JSContext currentArguments];
for (id obj in args) {
NSLog(@"%@",obj);
}
};
//此处我们没有写后台(但是前面我们已经知道iOS是可以调用js的,我们模拟一下)
//首先准备一下js代码,来调用js的函数test1 然后执行
//一个参数
NSString *jsFunctStr=@"MethodName('参数1')";
[context evaluateScript:jsFunctStr];
//二个参数
NSString *jsFunctStr1=@"MethodName('参数a','参数b')";
[context evaluateScript:jsFunctStr1];
}
第二种
// WebViewController.m
@protocol JSObjcDelegate <JSExport>
-(void)ShareInfo:(NSDictionary *)shareDict;
@end
@interface WebViewController ()<JSObjcDelegate>
@property (nonatomic, strong) JSContext *jsContext;
@end
- (void)webViewDidStartLoad:(UIWebView *)webView {
self.jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
self.jsContext[@"JSObjct"] = self; // JSObjct:JS的对象
self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) {
// NSLog(@"异常信息:%@", exceptionValue);
};
}
-(void)ShareInfo:(NSDictionary *)shareDict {
if (shareDict.count) {
// ...
}
}
网友评论