2009-12-13 8 views

Répondre

6

On dirait que vous allez l'autre diretction de ce jldupont suggéré. Quand vous passez un tableau en tant que paramètres soit une propriété ou une méthode.

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

Ce paramètre arriver à votre NPObject comme NPVariant de type NPVariantType_Object vous vous interrogez la propriété de longueur:

NPObject *inObject = val->value.objectValue; 
NPVariant npvLength; 
NPN_GetProperty(npp, inObject, NPN_GetStringIdentifier("length"), &npvLength); 

puis vous faites juste une boucle pour obtenir toutes les valeurs:

for (uint32_t i = 0; i < npvLength.value.intValue; i++) { 
    NPVariant curValue; 
    NPN_GetProperty(npp, inObject, NPN_GetIntIdentifier(i), &curValue); 
    // Do something with curValue 
} 

De même, si vous avez besoin de retourner un tableau à javascript, une autre option (autre que d'écrire une méthode pour émule un objet, comme je l'ai suggéré dans le thread que jldupont lié à) est d'utiliser NPN_GetValue pour obtenir le NPObject pour la fenêtre DOM, puis invoquer "Array" sur elle sans paramètres. Cela retournera un objet JS Array vide (en tant que NPObject *). Ensuite, il vous suffit de faire défiler les éléments que vous souhaitez renvoyer et d'appeler "push" avec l'élément en tant que premier (et seul) paramètre. J'espère que cela aidera

+0

Incidemment, le projet open source FireBreath (http://firebreath.googlecode.com) prend soin de tout cela pour vous, en plus de fournir une abstraction pour qu'il fonctionne également sur IE. (Je suis l'un des principaux mainteneurs de FireBreath) – taxilian

+0

La page web de FireBreath a été déplacée sur http://www.firebreath.org – taxilian

2

Vous pouvez utiliser un NPObject (voir ce thread) pour agir en tant que conteneur pour vos cordes (un peu comme un objet JS avec var arrayOfString={...strings here...}.

+1

Je voulais aller dans l'autre sens; de JS au plugin. Merci pour la contribution cependant, cela m'a donné des indices très utiles. –