我正在出于演示目的创建Firefox扩展。我从扩展名中调用文档中的特定JavaScript函数。我是在HTML文档中写的(不是在扩展名中,而是由Firefox加载的页面):
document.funcToBeCalled = function() {
// function body
};
然后,扩展程序将在某些事件上运行它:
var document = Application.activeWindow.activeTab.document;
document.funcToBeCalled();
但是,如果未定义funcToBeCalled
,则会引起错误。
注意:我可以通过调用document.getElementById(id);
来获得文档中的元素>
我正在出于演示目的创建Firefox扩展。我从扩展名中调用文档中的特定JavaScript函数。我是在我的HTML文档中写的(不是在扩展名内,而是在一个页面中...
出于安全考虑,您只能从扩展名访问内容页面。参见XPCNativeWrapper和Safely accessing content DOM from chrome,
document.wrappedJSObject.funcToBeCalled();
我有一个非常简单的方法。假设您必须调用写在页面上的xyz()函数。并且您必须从您的插件中调用它。
您可以执行此操作,但是您需要控制页面并能够提高脚本的特权级别。 Mozilla Documentation gives an example-在页面上搜索“权限”。
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;
}