Я хотел бы передать массив строк в плагин NPAPI. Как преобразовать NPVariant в массив строк?NPVariant для строкового массива
ответ
Похоже, что вы собираетесь другой diretction от того, что 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 (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, а затем вызвать «Array» на нем без параметров. Это вернет пустой объект JS Array (как NPObject *). Затем вы просто просматриваете элементы, которые хотите вернуть, и вызываете «push» с элементом в качестве первого (и единственного) параметра.
Надеюсь, это поможет
Вы можете использовать NPObject (см это thread) выступать в качестве контейнера для ваших строк (много как объект JS с var arrayOfString={...strings here...}
.
Я хотел пойти другим путем; от JS до плагина. Спасибо за ввод, но это дало мне очень полезные подсказки. –
Наверное, проект FireBreath с открытым исходным кодом (http://firebreath.googlecode.com) заботится обо всех этих вещах для вас, а также предоставляет абстракцию, чтобы он работал и на IE. (Я являюсь одним из основных разработчиков FireBreath) – taxilian
Веб-страница FireBreath перешла на http://www.firebreath.org – taxilian