JavaScriptCore:尝试将JS函数作为块传递给Objective-C,获取’TypeError’异常
作者:互联网
我一直在玩新的iOS 7 / Mavericks JavascriptCore桥,尝试将Objective-C上的JS函数作为块.
JavascriptCore头文件声明只要支持每个参数,这是可能的,但尝试这样做:
JSContext *context = [[JSContext alloc] init];
context[@"Log"] = ^(NSString *message){NSLog(@"%@", message);};
context[@"BlockTest"] = ^(void (^blockTest)(NSString* blockString)){
NSLog(@"Calling Block Test");
blockTest(@"STRINGGGGG");
};
[context evaluateScript:@"BlockTest( function(dataString){Log('JS '+dataString);} )"];
引发以下JS异常:
TypeError: '[object NSBlock]' is not a function (evaluating 'BlockTest( function(dataString){Log('JS '+dataString);} )')
关于我的测试代码有什么问题的任何想法?
解决方法:
我知道你已经接受了这个被删除的答案(并且这是一个老问题),但你可以将一个JS函数作为一个块传递给iOS7 / Mavericks引入的JavaScriptCore框架中的Objective-C – 你的代码只需要稍微改变你声明和调用块的方式:
JSContext *context = [[JSContext alloc] init];
context[@"Log"] = ^(NSString *message){NSLog(@"%@", message);};
context[@"BlockTest"] = ^(JSValue *blockTest){
NSLog(@"Calling Block Test");
[blockTest callWithArguments:@[@"STRINGGGGG"]];
};
[context evaluateScript:@"BlockTest( function(dataString){Log('JS '+dataString);} )"];
标签:javascript,objective-c,objective-c-blocks,webkit,javascriptcore 来源: https://codeday.me/bug/20190718/1492106.html