我想将一个字符串数组传递给NPAPI插件。如何将NPVariant转换为字符串数组?
答案 0 :(得分:6)
看起来你正在接受jldupont建议的其他指示。将数组作为参数传递给属性或方法时:
var arrayData = [1,2,3,4,5];
plugin.someProperty = arrayData;
// -or-
plugin.callSomeMethod(arrayData);
该参数将作为NPVariantType_Object类型的NPVariant到达NPObject。然后查询length属性:
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窗口,然后调用“数组”,没有参数。这将返回一个空的JS Array对象(作为NPObject *)。然后,您只需遍历要返回的项目,并使用该项目作为第一个(也是唯一的)参数调用“push”。
希望这有帮助
答案 1 :(得分:2)
您可以使用NPObject(请参阅此thread)充当字符串的容器(非常类似于var arrayOfString={...strings here...}
的JS对象。