1

我想将字符串数组传递给 NPAPI 插件。如何将NPVariant转换为字符串数组?

4

2 回答 2

6

看起来你正朝着 jldupont 建议的另一个方向发展。当您将数组作为参数传递给属性或方法时:

var arrayData = [1,2,3,4,5];
plugin.someProperty = arrayData;
// -or-
plugin.callSomeMethod(arrayData);

该参数将作为 NPVariantType_Object 类型的 NPVariant 到达您的 NPObject。然后查询长度属性:

NPObject *inObject = val->value.objectValue;
NPVariant npvLength;
NPN_GetProperty(npp, inObject, NPN_GetStringIdentifier("length"), &npvLength);

然后你只需执行一个 for 循环来获取所有值:

for (uint32_t i = 0; i < npvLength.value.intValue; i++) {
    NPVariant curValue;
    NPN_GetProperty(npp, inObject, NPN_GetIntIdentifier(i), &curValue);
    // Do something with curValue
}

同样,如果您需要将数组返回给 javascript,另一种选择(除了编写模拟对象的方法,正如我在 jldupont 链接到的线程中建议的那样)是使用 NPN_GetValue 获取 DOM 窗口的 NPObject,并且然后在没有参数的情况下对其调用“Array”。这将返回一个空的 JS 数组对象(作为 NPObject*)。然后,您只需遍历要返回的项目并使用该项目作为第一个(也是唯一的)参数调用“push”。

希望这可以帮助

于 2009-12-24T18:07:58.277 回答
2

您可以使用 NPObject(请参阅此线程)作为字符串的容器(很像带有var arrayOfString={...strings here...}.

于 2009-12-13T11:36:59.403 回答