Как выполнить определенную на странице функцию JavaScript из расширения Firefox? - PullRequest
8 голосов
/ 30 сентября 2008

Я создаю расширение Firefox для демонстрационных целей. Я для вызова конкретной функции JavaScript в документе из расширения. Я написал это в своем HTML-документе (не внутри расширения, а на странице, загруженной Firefox):

document.funcToBeCalled = function() {
   // function body
};

Затем расширение запустит это для некоторого события:

var document = Application.activeWindow.activeTab.document;
document.funcToBeCalled();

Однако возникает ошибка о том, что funcToBeCalled не определено.

Примечание. Я могу получить элемент документа, позвонив по номеру document.getElementById(id);

Ответы [ 4 ]

8 голосов
/ 03 октября 2008

По соображениям безопасности у вас ограниченный доступ к контентной странице из расширения. См. XPCNativeWrapper и Безопасный доступ к содержимому DOM из Chrome ,

Если вы управляете страницей, лучший способ сделать это - настроить прослушиватель событий на странице и отправить событие из вашего расширения (addEventListener на странице, dispatchEvent в расширении).

В противном случае см. http://groups.google.com/group/mozilla.dev.extensions/msg/bdf1de5fb305d365

6 голосов
/ 26 марта 2010
document.wrappedJSObject.funcToBeCalled();

Это небезопасно и позволяет вредоносной странице повысить свои права до разрешений вашего расширения ... Но она делает то, что вы просили. Прочтите о ранних уязвимостях greasemonkey , почему это плохая идея.

1 голос
/ 24 мая 2010

У меня есть очень простой способ сделать это. Предположим, вам нужно вызвать функцию xyz (), которая написана на странице. и вы должны позвонить из вашего плагина.

создать кнопку («сделайте ее невидимой. Чтобы она не мешала вашей странице»). при нажатии этой кнопки вызовите эту функцию xyz ().

<input type="button" id="testbutton" onclick="xyz()" />

теперь в плагине у вас есть объект документа для страницы. предположим, его mainDoc

где вы хотите вызвать xyz (), просто выполните эту строку

mainDoc.getElementById('testbutton').click();

вызовет функцию xyz ().

удачи:)

0 голосов
/ 30 сентября 2008

Вы можете сделать это, но вам нужно иметь контроль над страницей и иметь возможность повысить уровень привилегий для скрипта. Документация Mozilla приводит пример - поиск "Привилегии" на странице.

...