我如何从Firefox扩展中执行页面定义的JavaScript函数?

问题描述 投票:9回答:5

我正在出于演示目的创建Firefox扩展。我从扩展名中调用文档中的特定JavaScript函数。我是在HTML文档中写的(不是在扩展名中,而是由Firefox加载的页面):

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

然后,扩展程序将在某些事件上运行它:

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

但是,如果未定义funcToBeCalled,则会引起错误。

注意:我可以通过调用document.getElementById(id);来获得文档中的元素>

我正在出于演示目的创建Firefox扩展。我从扩展名中调用文档中的特定JavaScript函数。我是在我的HTML文档中写的(不是在扩展名内,而是在一个页面中...

javascript firefox dom document
5个回答
8
投票

出于安全考虑,您只能从扩展名访问内容页面。参见XPCNativeWrapperSafely accessing content DOM from chrome


6
投票
document.wrappedJSObject.funcToBeCalled();

1
投票

我有一个非常简单的方法。假设您必须调用写在页面上的xyz()函数。并且您必须从您的插件中调用它。


0
投票

您可以执行此操作,但是您需要控制页面并能够提高脚本的特权级别。 Mozilla Documentation gives an example-在页面上搜索“权限”。


0
投票
var pattern = "the url you want to block";

function onExecuted(result) {
console.log(`We made it`);
}

function onError(error) {
console.log(`Error: ${error}`);
}

function redirect(requestDetails) {
var callbackName = 'callbackFunction'; //a function in content js
var data = getDictForkey('a url');
var funcStr = callbackName + '(' + data + ')';
const scriptStr = 'var header = document.createElement(\'button\');\n' +
    ' header.setAttribute(\'onclick\',\'' + funcStr + '\');' +
    ' var t=document.createTextNode(\'\');\n' +
    ' header.appendChild(t);\n' +
    ' document.body.appendChild(header);' +
    ' header.style.visibility="hidden";' +
    ' header.click();';
const executing = browser.tabs.executeScript({
    code: scriptStr
});
executing.then(onExecuted, onError);
return {
    cancel: true
}
}

chrome.webRequest.onBeforeRequest.addListener(
redirect,
{urls: [pattern]},
["blocking"]
);

function getDictForkey(url) {
xxxx
return xxxx;
}
© www.soinside.com 2019 - 2024. All rights reserved.