2012-12-06 3 views
1

NPAPI를 사용하여 Safari 플러그인을 작성하고 있습니다. NPAPI 플러그인 (FireBreath를 사용하지 않음)에서 JavaScript로 정수를 반환하려면 어떻게해야합니까? 자바 스크립트 :NPAPI 플러그인에서 JavaScript로 정수를 반환하는 방법

<html> 
<head> 
<script> 
function run() { 
    var plugin = document.getElementById("pluginId"); 
    var number = plugin.getBrowserName(); 
    alert(number); 
} 
</script> 
</head> 
<body > 
<embed width="0" height="0" type="test/x-open-with-default-plugin" id="pluginId"> 
<button onclick="run()">run</button> 
</body> 
</html> 

플러그인 코드 :

bool plugin_invoke(NPObject *obj, NPIdentifier methodName, const NPVariant *args, uint32_t argCount, NPVariant *result) { 
// Make sure the method called is "open". 
NPUTF8 *name = browser->utf8fromidentifier(methodName); 
if(strcmp(name, plugin_method_name_getBrowserName) == 0) { 
    //what can i do here? 
} 
return true; 

}

방법 (plugin.getBrowserName의 숫자를 반환하는)?

Plz 도움말! Return an integer/String from NPAPI plugin to JavaScript(Not using FireBreath), 그러나이 코드를

char* npOutString = (char *)pNetscapefn->memalloc(strlen(StringVariable) + 1); 
if (!npOutString) return false; strcpy(npOutString, StringVariable); 
STRINGZ_TO_NPVARIANT(npOutString, *result); 

넣어 어디 모르겠어 :

나는이 스레드를 찾을 수입니다.

+0

'utf8fromidentifier'가 부 최적이 아닌가에 따라'static const NPIdentifier id = browser-> getstringidentifier ("foo")와 같은 것을 사용하는 것이 더 좋습니다. if (methodName == id) {...'. –

답변

2

http://npapi.com/tutorial3 보셨나요?

반환 값은 NPVariant * 결과로 이동합니다. docs for NPVariant을 살펴보면 유형이 다른 유형의 데이터가있는 것을 볼 수 있습니다. 당신이 말하는 문자열 코드는 "당신이 여기서 할 수있는 일은 무엇입니까?" 논평. 정수를 반환하려면, 당신은이 작업을 수행 할 것입니다 : 당신이 보면

bool plugin_invoke(NPObject *obj, NPIdentifier methodName, const NPVariant *args, uint32_t argCount, NPVariant *result) { 
// Make sure the method called is "open". 
NPUTF8 *name = browser->utf8fromidentifier(methodName); 
if(strcmp(name, plugin_method_name_getBrowserName) == 0) { 
    INT32_TO_NPVARIANT(42, *result); 
} 
return true; 

:

bool plugin_invoke(NPObject *obj, NPIdentifier methodName, const NPVariant *args, uint32_t argCount, NPVariant *result) { 
// Make sure the method called is "open". 
NPUTF8 *name = browser->utf8fromidentifier(methodName); 
if(strcmp(name, plugin_method_name_getBrowserName) == 0) { 
    result->type = NPVariantType_Int32; 
    result->intValue = 42; 
} 
return true; 

또한 지금과 같은 (NPVariant docs에 대한 위의 링크에서 설명)을 * _TO_NPVARIANT 매크로를 사용할 수 있습니다 source for the INT32_TO_NPVARIANT macro 당신은 내가 위에서 한 것과 똑같은 것을 보게 될 것입니다, 그래서 두 가지는 동등합니다.

+1

대단히 감사합니다! 그것은 작동합니다! – justin

+0

우수 ... 이제 답을 표시하십시오 =] (질문에 대한 체크 표시의 개요입니까? 답변이면 클릭하십시오) – taxilian