Выполнение внедренного кода Javascript на странице при разработке расширения Firefox - PullRequest
3 голосов
/ 18 ноября 2010

Я разрабатываю расширение Firefox, которое помещает кнопку в строке состояния.Когда кнопка нажата, расширение добавляет Javascript на текущую страницу.Этот Javascript имеет функцию, которую я хотел бы вызвать с некоторыми параметрами.Мне удалось внедрить код, я проверил страницу через Firebug и убедился, что JS был введен.Как я могу вызвать функцию Javascript на странице из моего расширения?

- Дополнительная информация

Вот код, который я использую для ввода моего Javascript:

var doc = window.content.document;

//Add the script
var visibilityJS = doc.createElement("script");
visibilityJS.setAttribute("type", "text/javascript");
visibilityJS.setAttribute("charset", "UTF-8");
visibilityJS.setAttribute("src", "chrome://visibility/content/scripts/visibility.js");
head.appendChild(visibilityJS);

//Call the function
alert("Executing testfunction");
window.content.document.defaultView.testFunction();

.. и код в моем файле JS, который я собираюсь внедрить.т.е. visibility.js

window.testFunction = function() {
    alert("Message");
}

Спасибо.

Ответы [ 2 ]

4 голосов
/ 20 ноября 2010

Это сработало. Я не знаю технических деталей. Я получил часть решения от Феликса, а часть от здесь .

window.content.document.defaultView.wrappedJSObject.testFunction();
2 голосов
/ 18 ноября 2010

Если вы объявляете глобальную переменную в своем введенном коде (или явно устанавливаете свойство объекта window), то один из способов получить ссылку на этот элемент из вашего расширения - через gBrowser объект:

gBrowser.contentDocument.defaultView.yourObject
          ^-- HTML document  ^
              object         |-- window object

Будьте осторожны, когда вы используете window и document внутри вашего кода.В зависимости от контекста он может ссылаться на окно Firefox или объект окна веб-сайта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...