2009-12-13 1 views

ответ

6

Похоже, что вы собираетесь другой 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» с элементом в качестве первого (и единственного) параметра.

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

+0

Наверное, проект FireBreath с открытым исходным кодом (http://firebreath.googlecode.com) заботится обо всех этих вещах для вас, а также предоставляет абстракцию, чтобы он работал и на IE. (Я являюсь одним из основных разработчиков FireBreath) – taxilian

+0

Веб-страница FireBreath перешла на http://www.firebreath.org – taxilian

2

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

+1

Я хотел пойти другим путем; от JS до плагина. Спасибо за ввод, но это дало мне очень полезные подсказки. –