2012-04-17 2 views
4

비동기 Obj-C 메서드가 완료되면 내 Objective-C 코드에서 해당 함수를 다시 호출 할 수 있도록 WebView에서 JavaScript의 함수 참조를 전달하려고합니다. 문자열, 숫자 등 - -하지만 뭔가 함수 참조 전달하는 방법을 알아낼 수없는 것, 내가 주위를 봤 한어떻게 JavaScript 콜백 함수를 Cocoa/Obj-C로 전달할 수 있습니까?

window.myRootObject.myObjCSelector("some-string", function(data) { 
    console.log(data); 
}); 

처럼,하지만 계속 나는 간단한 유형에 전달하는 방법을 참조 짧게 생각해 보았고, 문서에서이 문서에 대한 참조를 찾지 못했습니다 (아직). 코코아에서 일하지만 iOS에서 같은 일을 할 수 있기를 바랍니다.

미리 도움을 청하십시오!

편집 : 함수 인수는 익명이어야합니다. 이렇게하면 분명히 알 수 있습니다. :)

답변

14

마지막으로 알아 냈습니다. 더 좋은 방법이있을 수 있습니다 (그렇다면 차임하세요!)하지만 다음과 같이 작동하는 것 같습니다. 내를 Obj-C (NSObject 유도 된) 클래스에서 -되는 나는 WebView에 대한 참조를 전달 - 나는 다음과 같은 스크립트 접근 방법 정의 :

#import <WebKit/WebKit.h> 
#import <JavaScriptCore/JavaScriptCore.h> 

- (void) search:(NSString *)prefix withCallback:(WebScriptObject *)callback; 

... 두 개의 인수를하기위한 것입니다 : 검색 할 문자열 및 결과를 처리하는 익명의 함수 콜백. 그것은 thusly 히 구현 것 :

- (void) search:(NSString *)prefix withCallback:(WebScriptObject *)callback 
{ 
    // Functions get passed in as WebScriptObjects, which give you access to the function as a JSObject 
    JSObjectRef ref = [callback JSObject]; 

    // Through WebView, you can get to the JS globalContext 
    JSContextRef ctx = [[view mainFrame] globalContext]; 

    // In my case, I have a JSON string I want to pass back into the page as a JavaScript object 
    JSValueRef obj = JSValueMakeFromJSONString(ctx, JSStringCreateWithCFString((__bridge CFStringRef)responseString)); 

    // And here's where I call the callback and pass in the JS object 
    JSObjectCallAsFunction(ctx, ref, NULL, 1, &obj, NULL); 
} 

이 실제로 목표 - C 블록을 통해, 비동기 적으로 잘 작동하지만, 요점 위입니다. 희망은 다른 사람을 돕는다!

+0

감사합니다; 이것은 명확히 나를 도왔다! – tenfour

0

아마도 전역 적이 지 않은 익명 함수 인 경우 함수 이름을 Obj-C에 전달하고 sth를 [NSString stringWithFormat:@"%@()", function_name]과 같이 평가할 수 있습니까?

+0

아, 내 잘못이야. 익명이어야하며, 사과해야하고, 내가 더 명확하게 편집했습니다. –

+0

나는 이것이 가능하지 않을까 걱정된다. can not 당신은 그것을 약간의 이름을주고'window.myRootObject.myObjCSelector ("some-string", mynamespace_func1); 그러면 Obj-C에서 쉽게 호출 할 수 있습니다. –

+0

물론, 그렇게 할 수 있습니다. 하지만 Objective-C는 두 번째 인수가 JavaScript 함수 참조라고 가정하고 WebView에서 호출 할 JavaScript 함수를 어떻게 알 수 있습니까? (나는 분명히하고 싶다 - 사과하지 않는다면 사과해야한다.) –

관련 문제