2011-01-05 1 views
1

Я читал о том, как получить дескриптор элементов DOM. Это была очень полезная ссылка: http://forums.mozillazine.org/viewtopic.php?f=27&t=1521545NPAPI - использовать объекты/функции javascript изнутри плагина

Вопрос теперь в том, могу ли я получить дескриптор объекта/объекта Javascript, который я создал, или произвольных функций?

При загрузке страницы, у меня есть скрипт, выполняющее что-то вроде этого ...

var controller = new Controller() 

или

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

теперь из моего плагина, я хочу, чтобы иметь возможность вызывать методы из мой объект контроллера. ИЛИ, выполните эту функцию callme. Возможно ли это, и как я могу это сделать?

Спасибо,

Chris

ответ

7

С вашей ссылке вы знаете, как получить NPObject для окна DOM; оттуда все, что вам нужно знать, это то, что все глобальные переменные javascript на самом деле являются свойствами окна.

var controller = new Controller(); 

Если вы сделали это в глобальном масштабе, то 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); 

Вы можете затем доступ к свойствам на вашем Controller объекта или вызова. Обратите внимание, что если контроллер был функцией, вы могли бы назвать его NPN_InvokeDefault.

BTW, FireBreath автоматизирует большинство из этого.

+0

Отлично, спасибо большое. Я прочитал ваш блог и учебник по 3-сторонним плагинам, но, похоже, мне недостает ноу-хау DOM/javascript, который находится на пути. Я попытался предположить, что это было правдой, и использовала javascript-консоль chrome для отображения свойств объекта окна, но другая ошибка была в том, что мешало моему объекту быть дочерним элементом окна. Я ценю быстрый ответ. – chrisd