JavaScriptCore是iOS7中新加入的框架,苹果官方提供的JSContext可以实现Objective-C和JavaScript代码的交互。
1 OC需要知道JS方法名
-(void)webViewDidFinishLoad:(UIWebView *)webView{
//1 获取JSContext
JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
//2 通过JS中的方法名调用Block中OC代码
context[@"jsMethodName"] = ^{
NSArray *currentArg = [JSContext currentArguments];
for (id obj in currentArg) {
NSLog(@"%@",obj);
}
};
//3 模拟调用jsMethodName,JS参数是不固定的
NSString *jsMethondAction = @"jsMethodName('小辣椒','18')";
[context evaluateScript:jsMethondAction];
}
2 JS需要知道OC的方法名
凡事添加了JSExport协议的协议,所规定的方法变量等,就会对js开放,我们可以通过js调用到
#import <Foundation/Foundation.h>
#import <JavaScriptCore/JavaScriptCore.h>
@protocol JSInvokingMyOCObjectDelegate <JSExport>
-(void)invokingMyOCObjectWith:(NSString *)name Age:(NSString *)age;
@end
@interface JSInvokingMyOCObject : NSObject<JSInvokingMyOCObjectDelegate>
@end
#import "JSInvokingMyOCObject.h"
@implementation JSInvokingMyOCObject
-(void)invokingMyOCObjectWith:(NSString *)name Age:(NSString *)age{
NSLog(@"Name->%@;Age->%@",name,age);
}
@end
-(void)webViewDidFinishLoad:(UIWebView *)webView{
//1 获取JSContext
JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
//2 告诉JS你的方法名,调用OC方法
JSInvokingMyOCObject *myObj = [JSInvokingMyOCObject new];
context[@"windowiOS"]=myObj;//使用window不行
//3 模拟调用jsMethodName,JS参数是不固定的
NSString *jsMethondAction = @"windowiOS.invokingMyOCObjectWithAge('小辣椒','18')";
[context evaluateScript:jsMethondAction];
}
网友评论