2009-12-13 88 views

回答

6

看起來你打算從jldupont提出什麼其他diretction。當你傳遞一個數組作爲參數傳遞給屬性或方法:

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

這個參數會得到你的NPObject類型NPVariantType_Object的NPVariant你再查詢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,然後在其上調用沒有參數的「Array」。這將返回一個空的JS Array對象(作爲NPObject *)。然後,您只需循環瀏覽要返回的項目,並將該項目作爲第一個(也是唯一)參數調用「push」。

希望這會有幫助

+0

可以肯定的是,開源項目FireBreath(http://firebreath.googlecode.com)負責爲您提供所有這些東西,並提供一個抽象,以便它可以在IE上運行。 (我是FireBreath的主要維護者之一) – taxilian 2009-12-24 18:10:15

+0

FireBreath的網頁已移至http://www.firebreath.org – taxilian 2010-12-02 18:48:17

2

您可以使用NPObject(見本thread)作爲您的字符串(就像用var arrayOfString={...strings here...}一個JS對象的容器。

+1

我想走另一條路;從JS到插件。感謝您的意見,但它給了我非常有用的線索。 – 2009-12-25 23:22:23