如何将整数从 NPAPI 插件返回到 JavaScript



我正在用NPAPI编写一个野生动物园插件。如何将一个整数从 NPAPI 插件(不使用 FireBreath)返回到 JavaScript?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()返回一个数字?

请帮忙!

我发现这个线程:从NPAPI插件返回一个整数/字符串到JavaScript(不使用FireBreath),但我不知道这些代码在哪里

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

放。

你看过 http://npapi.com/tutorial3 吗?

返回值包含在 NPVariant* 结果中。 去看看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) {
  result->type = NPVariantType_Int32;
  result->intValue = 42;
}
return true;

您还可以使用 *_TO_NPVARIANT 宏(在上面的 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;

如果您查看INT32_TO_NPVARIANT宏的来源,您会发现它只是执行与我上面所做的相同操作,因此两者是等效的。

最新更新