2011-04-06 49 views
4

我正在研究一个需要接收来自javascript的调用的插件。具体来说,它需要能够给JavaScript一个回调函数,并且JavaScript需要能够稍后使用至少一个字符串参数来调用该函数。 JavaScript的看起来是这样的(理想):如何使用NPAPI从页面上的JavaScript接收呼叫?

​​3210

我想象我的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 2011-04-06 16:39:26

+0

不客气...有没有你没有选择答案的原因?如果不是这样,你能澄清一下是什么吗? – taxilian 2012-01-05 16:43:02

1

我对此可能完全错误,但在Internet Explorer中,您使用的是window.external。但是当然,MSIE是与基于Netscape的NPAPI不​​同的架构,所以我不能确定。 无论如何,如果你必须在MSIE中这样做,你可能会发现这个提示很有用。