如何使用NPAPI在页面上接收来自javascript的调用?

如何使用NPAPI在页面上接收来自javascript的调用?,javascript,npapi,Javascript,Npapi,我正在开发一个需要接收javascript调用的插件。具体地说,它需要能够为javascript提供回调函数,并且javascript需要能够在以后使用至少一个字符串参数调用该函数。javascript看起来像这样(理想情况下): 到目前为止,我想象我的C代码是这样的: void SetCallback(void (*callback)(const char*)) { NPVariant npCallback; OBJECT_TO_NPVARIANT(callback, npCallba

我正在开发一个需要接收javascript调用的插件。具体地说,它需要能够为javascript提供回调函数,并且javascript需要能够在以后使用至少一个字符串参数调用该函数。javascript看起来像这样(理想情况下):

到目前为止,我想象我的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中是不可能的


提前谢谢。

我可能完全错了,但在Internet Explorer中,您使用的是
窗口。外部
。当然,MSIE与基于Netscape的NPAPI是不同的体系结构,所以我不能确定。
无论如何,如果必须在MSIE中执行此操作,您可能会发现此提示很有用。

基本上,您需要做的是提供一个实现InvokedFault的NPObject;您将其传递回页面以响应某些Invoke或GetProperty调用,然后javascript可以随时使用您想要的任何参数将其作为函数调用

有关NPObject的详细信息,请参见


将所有这些抽象化,以便90%的重物都为您完成;如果您还没有看过,我强烈推荐。

谢谢您的回复和链接!不客气。。。你没有选择答案有什么原因吗?如果不是这样,你能澄清一下是什么吗?
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);
}