2011-01-05 9 views
1

J'ai lu comment obtenir un handle sur les éléments DOM. Ce fut un lien très utile: http://forums.mozillazine.org/viewtopic.php?f=27&t=1521545NPAPI - utiliser des objets/fonctions javascript depuis le plugin

Ma question est maintenant, puis-je obtenir un traitement sur un Javascript var/objet que j'ai créé, ou des fonctions arbitraires?

Sur chargement de la page, j'ai un script d'exécuter quelque chose comme ça ...

var controller = new Controller() 

ou

function callme(param1, param2) { ... } 

maintenant, à partir de mon plug-in, je veux être en mesure d'appeler des méthodes de mon objet contrôleur. OU, exécutez cette fonction callme. Est-ce possible et comment pourrais-je y arriver?

Merci,

Chris

Répondre

7

De votre lien, vous savez comment obtenir le NPObject pour la fenêtre DOM; de là, tout ce que vous devez savoir, c'est que toutes les variables javascript globales sont en fait les propriétés de la fenêtre.

var controller = new Controller(); 

Si vous avez fait cela dans la portée globale, alors window.controller est votre variable, donc il vous suffit de le faire:

/* Get window object */ 
NPObject* window = NULL; 
NPN_GetValue(aInstance, NPNVWindowNPObject, &window); 

/* Get document object */ 
NPVariant controllerVar; 
NPIdentifier id = NPN_GetStringIdentifier("controller"); 
NPN_GetProperty(aInstance, window, id, &controllerVar); 
NPObject* document = NPVARIANT_TO_OBJECT(controllerVar); 

Vous pouvez ensuite accéder à des propriétés sur votre objet ou Controller méthodes d'appel. Notez que si le contrôleur était une fonction, vous pouvez l'appeler avec NPN_InvokeDefault.

BTW, FireBreath automatise la plupart de cela.

+0

Super, merci beaucoup. J'ai lu votre blog et votre tutoriel de plug-in en 3 parties, mais il semble que mon manque de savoir-faire DOM/javascript me gêne. J'ai essayé de supposer que ce qui précède était vrai, et utilisé la console javascript de chrome pour lister les propriétés de l'objet fenêtre, mais une erreur différente était dans la façon qui empêchait mon objet d'être un enfant de fenêtre. J'apprécie la réponse rapide. – chrisd

Questions connexes