如何从Firefox扩展执行页面定义的JavaScript函数
How do I execute a page-defined JavaScript function from a Firefox extension?
我正在创建一个用于演示目的的Firefox扩展。我从扩展中调用了文档中特定的JavaScript函数。我在我的HTML文档中写了这篇文章(不是在扩展中,而是由Firefox加载的页面):
document.funcToBeCalled = function() {
// function body
};
然后,扩展将在某个事件上运行此操作:
var document = Application.activeWindow.activeTab.document;
document.funcToBeCalled();
然而,它提出了一个错误,即funcToBeCalled
没有定义。
注意:我可以通过调用document.getElementById(id);
来获取文档上的一个元素
出于安全原因,您只能通过扩展访问内容页面。请参阅XPCNativeWrapper和从chrome、安全访问内容DOM
如果控制页面,最好的方法是在页面中设置一个事件侦听器,并从扩展中调度一个事件(在页面中添加EventListener,在扩展中调度event)。
否则,请参阅http://groups.google.com/group/mozilla.dev.extensions/msg/bdf1de5fb305d365
document.wrappedJSObject.funcToBeCalled();
这是不安全的,并允许恶意页面将其权限提升到您的扩展权限。。。但是,它确实做到了你的要求。阅读早期的防油渍漏洞,了解为什么这是个坏主意。
我有一个非常简单的方法。假设您必须调用写在页面上的xyz()函数。而且你必须从你的插件中调用它。
创建一个按钮("使其不可见。这样它就不会干扰您的页面")。点击该按钮,调用这个xyz()函数。
<input type="button" id="testbutton" onclick="xyz()" />
现在在pluggin中,您有一个页面的文档对象。假设它的mainDoc
在您想要调用xyz()的地方,只需执行这行
mainDoc.getElementById('testbutton').click();
它将调用xyz()函数。
祝你好运:)
您可以这样做,但您需要控制页面并能够提高脚本的权限级别。Mozilla文档给出了一个例子——在页面上搜索"特权"。
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;
}
- 表达式引擎扩展开发-向呈现的条目添加自定义javascript
- Can用户'MediaWiki上的自定义JavaScript调用Lua模块
- 动态加载的自定义javascript/jQuery/HTML5音频播放器的问题
- 使用drupal中自定义javascript文件中的一个函数
- 行末尾未定义Javascript
- 使用浏览器在页面(客户端)上运行自定义JavaScript来模拟点击?怎么做
- 在对象中定义JavaScript获取和设置函数,而不使用“;这个“;
- 未定义Javascript文档
- 使用谷歌地图:一个返回undefined的自定义javascript函数
- target=“_空白“;使用自定义javascript生成的html页面
- Meteor:选择自定义javascript和自定义css作为模板
- 用自定义javascript全局命名空间替换窗口
- 怎么了?通过字符串定义 JavaScript 命名空间
- 为什么自定义 JavaScript 文件放在客户端文件夹中时不在我的 Meteor 模板上呈现
- 定义 JavaScript 类的局部变量
- 创建自定义 Javascript 对象的惯用方法有哪些
- 当通过选择页面上所有复选框的 jQuery 脚本选中复选框时,如何触发自定义 javascript 事件
- 我的自定义javascript旋转木马无法正常工作
- 自定义javascript日期
- 如何在联系人表单7 Wordpress中添加自定义javascript函数