1
Objective-C에서 JavascriptCore를 사용하여 JS 함수를 실행하려고합니다. 여기에 JS 코드입니다 :콜백으로 JS를 실행할 때 JavascriptCore가 응답하지 않는다
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를 호출하는 목표 - 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 함수. 나는 그들을 모두 단일 JS로 패키지화하기 위해 browserify를 사용하고있다. 콜백을 통해 비동기 적으로 반환되는 함수에 문제가 있음을 눈치 채고 있습니다. (내가 문맥에
callback
함수를 추가하고있다.) - 나는 이것을 XCode에서 실행할 때 (응용 프로그램뿐만 아니라 XCode 편집기 자체도 멈추고 활동 모니터에서 프로세스를 죽일 때까지 복구되지 않는다.)
- 그러나 어떤 이유로 나는 랩톱에서 iPhone을 분리하자마자 결과를 반환합니다. (이 시점에서 XCode는 죽일 때까지 여전히 limbo 상태입니다.)
- 일단 Xcode에서 분리되면 앱이 정상적으로 실행됩니다. Xcode에서 실행되는 동안 실행이 중단됩니다.