NPAPI - 使用插件中的javascript对象/函数

chr*_*isd 1 javascript plugins npapi

我已经读过如何获取DOM元素的句柄.这是一个非常有用的链接:http://forums.mozillazine.org/viewtopic.php?f = 27&t = 1521545

我现在的问题是,我可以处理我创建的Javascript var/object或任意函数吗?

在页面加载时,我有一个脚本执行这样的事情......

var controller = new Controller()
Run Code Online (Sandbox Code Playgroud)

要么

function callme(param1, param2) { ... }
Run Code Online (Sandbox Code Playgroud)

现在,从我的插件中,我希望能够从我的控制器对象中调用方法.或者,执行该函数callme.这是可能的,我将如何做到这一点?

谢谢,

克里斯

tax*_*ian 7

从您的链接中,您知道如何获取DOM窗口的NPObject; 从那里你需要知道的是,所有全局javascript变量实际上是窗口的属性.

var controller = new Controller();
Run Code Online (Sandbox Code Playgroud)

如果您已在全局范围内完成此操作,则window.controller是您的变量,因此您只需执行以下操作:

/* 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);
Run Code Online (Sandbox Code Playgroud)

然后,您可以访问Controller对象的属性或调用方法.请注意,如果控制器是一个功能,你可以调用它NPN_InvokeDefault.

顺便说一句,FireBreath自动化了大部分内容.