2011-04-06 2 views
4

자바 스크립트에서 전화를 받아야하는 플러그인을 만들고 있습니다. 특히 javascript에 콜백 함수를 제공 할 수 있어야하며 자바 스크립트는 나중에 적어도 문자열 인수로 해당 함수를 호출 할 수 있어야합니다.NPAPI를 사용하여 페이지의 자바 스크립트에서 전화를받는 방법은 무엇입니까?

var callback = null; 
var setCallback = function(cb) { 
    var callback = cb; 
}; 
var input = document.getElementById('my_text_input_field'); 
input.onkeypress = function(ev) { 
    // Did the user press enter? 
    if (ev && ev.which == 13) { 
    callback(input.value); 
    return false; 
    } 
}; 

내 C 코드는 다음과 같이 보입니다 상상하고있어, 지금까지 :

void SetCallback(void (*callback)(const char*)) { 
    NPVariant npCallback; 
    OBJECT_TO_NPVARIANT(callback, npCallback); 
    NPVariant args[] = { npCallback }; 
    size_t nargs = 1; 
    NPVariant result; 
    // gFuncs is an NPNetscapeFuncs pointer 
    NPIdentifier method = gFuncs->getstringidentifier("setCallback"); 
    // gJavaScriptAPI is an NPObject pointer 
    gFuncs->invoke(gInstance, gJavaScriptAPI, method, args, nargs, &result); 
} 

이 합리적인 시작되는 자바 스크립트 (적)이 같이 보입니다? 그렇다면 호출을 처리하기 위해 콜백 함수에서 무엇을해야합니까? 그렇지 않은 경우 이와 같은 작업을 수행하는 올바른 방법은 무엇입니까? 아니면 NPAPI에서 불가능합니다.

미리 감사드립니다.

답변

4

기본적으로 수행해야 할 작업은 InvokeDefault를 구현하는 NPObject를 제공하는 것입니다. 일부 Invoke 또는 GetProperty 호출에 대한 응답으로 해당 페이지로 다시 전달합니다. 그러면 javascript는 원하는 모든 인수를 사용하여 언제든지 함수로 호출 할 수 있습니다. 일반적으로 NPObjects에 대한 자세한 내용은

, http://npapi.com/tutorial3

FireBreath는이 모든 것을 추상화 볼 수 있도록 당신을 위해 수행 무거운의 90 % 당신이 그것을 보지 않은 경우에 나는 높게 그것을 추천한다.

+0

응답과 링크에 감사드립니다. – itfische

+0

환영합니다 ... 답변을 선택하지 않은 이유가 무엇입니까? 이것이 아닌 경우 무엇이 무엇인지 명확히 할 수 있습니까? – taxilian

1

내가 완전히 틀릴 수도 있지만 Internet Explorer에서는 window.external을 사용합니다. 물론 MSIE는 Netscape 기반 NPAPI와는 다른 아키텍처이므로 확신 할 수 없습니다. MSIE에서이 방법을 사용해야하는 경우이 팁이 유용 할 수 있습니다.

관련 문제