2014-10-05 2 views
3

JSExport 프로토콜을 활용하여 Javascript 함수 객체를 JavascriptCore를 통해 Objective-C로 보내려고합니다.JavascriptCore를 사용하여 objective-C로 javascript 함수 보내기

(class View) 
+ (void) newWithFunc:(id)func 
{ 
    NSLog(@" %@ ", func); 
} 

이 클래스를 선언 후, 나는 매개 변수

JSValue *val; 
val = [context evaluateScript:@"var mufunc = function() { self.value = 10; };"]; 
val = [context evaluateScript:@"mufunc;"]; 
NSLog(@" %@", val); //Prints as 'function() { self.value = 10; }', seems correct. 
val = [context evaluateScript:@"var view = View.newWithFunc(mufunc);"]; 

로 자바 스크립트 함수 객체로 위의 함수를 호출하려고 다음과 같이 나는 기능은 JSExport에 부합하는, 목표 - C에서 선언 마지막 호출이 이루어지면 Objective-C 메소드로 전송 된 매개 변수는 'NSDictionary'유형입니다.이 함수는 나중에 Objective-C에서이 함수를 호출 할 때 매우 유용하지 않습니다. 시각. 이게 JavascriptCore로 가능합니까?

답변

1

Tayschrenn's answer을 정확하게 기재하십시오. 매개 변수 (id)func 선언

- (void)newWithFunc: (JSValue*)func 
{ 
    [func callWithArguments:@[]]; // will invoke js func with no params 
} 

명백하게있는 NSDictionary로 변환하는 자바 스크립트 - 코코아 다리를 발생시킵니다 그는 그것이 문서화 곳을 알고 또는 얼마나 잘 모르겠지만, 이것은 내가 시행 착오를 알아 낸 것입니다 (당신이 알아 차렸 듯이) 호출 할 수있는 JSValue로 사용할 수 없게 만든다.

1

이것은 가능하지만 일반 ID가 아닌 JSValue *를 허용하려면 newWithFunc :를 변경해야합니다. 그 이유는 JSValue *가 JavaScriptCore의 특별한 유형이기 때문입니다. JS 값을 원래의 동등한 값으로 변환하려고 시도하지 않고 JSValue로 감싸서 전달합니다.

관련 문제