Как мне выполнить определяемую страницей функцию JavaScript из расширения Firefox?

StackOverflow https://stackoverflow.com/questions/151555

Вопрос

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

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

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

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

Однако это вызывает ошибку, в которой говорится, что funcToBeCalled не определено.

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

Это было полезно?

Решение

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

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

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

Другие советы

document.wrappedJSObject.funcToBeCalled();

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

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

создайте кнопку ("сделайте ее невидимой.так что это не потревожит вашу страницу ").при одном нажатии на эту кнопку вызывается эта функция xyz().

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

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

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

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

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

удачи :)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top