我正在尝试使用Objective-C中的JavascriptCore运行JS函数。这是JS代码:
var FeedParser = require('feedparser');
var run = function(data, options){
var feedparser = new FeedParser(options);
feedparser.on('readable', function() {
if(callback){
callback(this.read());
}
});
feedparser.end(data);
};
module.exports = {
run: run
};
这是调用JS的Objective-C代码:
NSString *path = [[NSBundle mainBundle] pathForResource:@"rss" ofType:@"js"];
NSStringEncoding encoding;
NSError *error = nil;
NSString *js = [NSString stringWithContentsOfFile:path
usedEncoding:&encoding
error:&error];
JSContext *context = [[JSContext alloc] init];
[context setExceptionHandler:^(JSContext *context, JSValue *value) {
NSLog(@"%@", value);
}];
context[@"callback"] = ^(JSValue *val){
@try{
if([val isString]){
NSLog(@"%@", [val toString]);
} else if([val toDictionary][@"0"]){
NSLog(@"%@", [val toArray]);
} else {
NSLog(@"%@", [val toDictionary]);
}
}
@catch(NSException *e){
}
};
[context evaluateScript:js];
JSValue *parse = context[@"rss"][@"run"];
[parse callWithArguments:@[data, o]];
注意:
callback
函数添加到上下文中。答案 0 :(得分:0)
可能你试图通过toDictionary调用将一些JavaScript值转换为NSDictionary。此方法尝试递归地转换值,因此它经常导致挂起。我怀疑在这种情况下,任何带循环引用的JS值都会导致无限递归。尝试直接使用JSValue。