Jor*_*hen 3 javascript webkit objective-c objective-c-blocks javascriptcore
我一直在玩新的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);} )"];
Run Code Online (Sandbox Code Playgroud)
引发以下JS异常:
TypeError: '[object NSBlock]' is not a function (evaluating 'BlockTest( function(dataString){Log('JS '+dataString);} )')
Run Code Online (Sandbox Code Playgroud)
关于我的测试代码有什么问题的任何想法?
我知道你已经接受了这个被删除的答案(并且这是一个老问题),但你可以将一个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);} )"];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2067 次 |
| 最近记录: |