2008-09-30 3 views
8

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

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

Тогда расширение будет работать это на какое-то событие:

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

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

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

ответ

8

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

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

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

+0

Мы действительно могли бы сделать это без каких-либо проблем (или какой-то материал «контрольной страницы») http://stackoverflow.com/questions/42577963/calling-web-sites-js-function-from-firefox-addon-web-extensions it's также проще для Chrome, но теперь только проблема с веб-расширениями для Firefox – user25 2017-03-03 12:06:47

0

Вы можете сделать это, но вы должны иметь контроль над страницы и быть в состоянии поднять уровень привилегий для сценария. Mozilla Documentation gives an example - найдите «Привилегия» на странице.

+0

Это ответ на другой вопрос, и рекомендации enablePrivilege не является хорошей идеей в целом. – Nickolay 2008-10-03 18:21:28

6
document.wrappedJSObject.funcToBeCalled(); 

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

1

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

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

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

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

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

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

это будет вызывать функцию хуг().

удачи :)

Смежные вопросы