编程语言
首页 > 编程语言> > JavaScriptCore:尝试将JS函数作为块传递给Objective-C,获取’TypeError’异常

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