【发布时间】:2016-06-02 18:29:46
【问题描述】:
我正在尝试使用来自 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]];
注意:
- 需要明确的是,这种方法适用于所有其他立即返回结果的 JS 函数。我正在使用 browserify 将它们全部打包到一个 JS 中。我只是注意到通过回调异步返回的函数存在问题。 (请注意,我正在将
callback函数添加到上下文中。 - 当我在 XCode 上运行它时,它会挂起(不仅是应用程序,还有 XCode 编辑器本身,并且在我从 Activity Monitor 中终止进程之前它永远不会恢复)。
- 但是由于某种原因,当我从笔记本电脑上拔下 iPhone 时,它会立即返回结果。 (此时 XCode 仍处于不确定状态,直到我将其杀死)
- 从 XCode 分离后,应用程序运行良好。它只是在从 XCode 调用的 run 运行时挂起。
【问题讨论】:
标签: objective-c xcode javascriptcore