Je voudrais passer un tableau de chaînes à un plugin NPAPI. Comment puis-je convertir NPVariant en un tableau de chaînes?NPVariant to string array
Répondre
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
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...}
.
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. –
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
La page web de FireBreath a été déplacée sur http://www.firebreath.org – taxilian