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

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

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

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

然而,它引发了一个错误,指出 funcToBeCalled 未定义。

注意:我可以通过调用 document.getElementById(id);

来获取文档中的元素
有帮助吗?

解决方案

出于安全原因,您对扩展程序中的内容页面的访问权限有限。请参阅 XPCNativeWrapper 从Chrome安全访问内容DOM

如果你控制页面,最好的方法是在页面中设置一个事件监听器,并从你的扩展中派遣一个事件(页面中的addEventListener,扩展中的dispatchEvent)。

否则,请参阅 http://groups.google.com/group /mozilla.dev.extensions/msg/bdf1de5fb305d365

其他提示

document.wrappedJSObject.funcToBeCalled();

不安全并允许恶意网页将其权限提升为您的扩展程序的权限......但是,它确实按照您的要求执行操作。阅读早期的 greasemonkey漏洞为什么这是一个坏主意。

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

创建一个按钮(“让它隐身。所以它不会打扰你的页面”)。在该按钮的onclick上调用此xyz()函数。

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

现在在插件中你有一个页面的文档对象。假设它的mainDoc

你要调用xyz(),只需执行此行

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

它将调用xyz()函数。

祝你好运:)

您可以这样做,但您需要控制页面并能够提高脚本的权限级别。 Mozilla文档提供了一个示例 - 搜索“权限”。在页面上。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top