NPVariant в строковый массив

Я хотел бы передать массив строк плагину NPAPI. Как преобразовать NPVariant в массив строк?


person l.thee.a    schedule 13.12.2009    source источник


Ответы (2)


Похоже, вы идете в другом направлении от того, что предложил jldupont. Когда вы передаете массив в качестве параметров свойства или метода:

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

Этот параметр попадет в ваш NPObject как NPVariant типа NPVariantType_Object. Затем вы запрашиваете свойство длины:

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 для получения NPObject для окна DOM, и затем вызовите «Массив» на нем без параметров. Это вернет пустой объект JS Array (как NPObject*). Затем вы просто перебираете элементы, которые хотите вернуть, и вызываете «push» с элементом в качестве первого (и единственного) параметра.

Надеюсь это поможет

person taxilian    schedule 24.12.2009
comment
Между прочим, проект с открытым исходным кодом FireBreath (firebreath.googlecode.com) позаботится обо всем этом за вас, плюс предоставление абстракции, чтобы она работала и в IE. (Я один из основных сопровождающих FireBreath) - person taxilian; 24.12.2009

Вы можете использовать NPObject (см. этот поток), чтобы действовать как контейнер для ваших строк (во многом как объект JS с var arrayOfString={...strings here...}.

person jldupont    schedule 13.12.2009
comment
Я хотел пойти другим путем; из JS в плагин. Спасибо за вклад, хотя, это дало мне очень полезные подсказки. - person l.thee.a; 26.12.2009