开发Firefox扩展时在页面中执行注入的Javascript代码

开发Firefox扩展时在页面中执行注入的Javascript代码,javascript,firefox,firefox-addon,Javascript,Firefox,Firefox Addon,我正在开发一个Firefox扩展,在状态栏中放置一个按钮。单击按钮时,扩展将向当前页面中注入一些Javascript。这个Javascript有一个我想用一些参数调用的函数。我成功地注入了代码,通过Firebug检查了页面,并验证了JS已经被注入。如何从扩展名调用页面中的Javascript函数 --更多信息 下面是我用来注入Javascript的代码: var doc = window.content.document; //Add the script var visibilityJS =

我正在开发一个Firefox扩展,在状态栏中放置一个按钮。单击按钮时,扩展将向当前页面中注入一些Javascript。这个Javascript有一个我想用一些参数调用的函数。我成功地注入了代码,通过Firebug检查了页面,并验证了JS已经被注入。如何从扩展名调用页面中的Javascript函数

--更多信息

下面是我用来注入Javascript的代码:

var doc = window.content.document;

//Add the script
var visibilityJS = doc.createElement("script");
visibilityJS.setAttribute("type", "text/javascript");
visibilityJS.setAttribute("charset", "UTF-8");
visibilityJS.setAttribute("src", "chrome://visibility/content/scripts/visibility.js");
head.appendChild(visibilityJS);

//Call the function
alert("Executing testfunction");
window.content.document.defaultView.testFunction();
…以及我将要注入的JS文件中的代码。i、 e.visibility.js

window.testFunction = function() {
    alert("Message");
}

谢谢。

如果在注入的代码中声明一个全局变量(或显式设置
窗口
对象的属性),那么从扩展中获取此元素引用的一种方法是通过对象:


但是,在代码中使用
窗口
文档
时要小心。根据上下文的不同,它可能会引用Firefox窗口或网站窗口对象。

这是有效的。我不知道技术细节。我从费利克斯那里得到了一部分解决方案,另一部分是从他那里得到的


你好,菲利克斯。我不太明白你的意思。我也试着阅读文档,即你指出的那一页,但我还是不能完全理解。我尝试了
window.content.document.
,但没有成功。你会有一个简单的例子吗?谢谢。@IDANG Agarwalla先生:你很接近了
window.content.document
应提供与
gBrowser.contentDocument
相同的内容。但这将为您提供网站的
文档
对象。全局变量始终是网站的
窗口
对象的属性<代码>文档。默认视图应该为您提供该对象。请尝试
window.content.document.defaultView.
。您好,Felix。我似乎仍然无法访问它。我得到以下错误-
window.content.document.defaultView.testFunction
不是一个函数。我试着从JavaScript控制台调用
testFunction
,它成功了,但扩展仍然无法访问它。我是否以任何方式添加或修改注入的Javascript代码?再次感谢。@Mridang Agarwalla:如果您使用
function testFunction(){}
定义函数,那么它将无法工作。但是如果您使用
window.testFunction=function(){}
定义它,那么它应该是…Hi Felix。我已经按照你的指示修改了函数。我可以通过Javascript控制台调用它,但当我的扩展尝试调用它时,仍然会出现与前面相同的错误。我已经编辑了我的原始问题,以便更清楚地了解我将如何处理这一问题。有什么不对劲吗?
gBrowser.contentDocument.defaultView.yourObject
          ^-- HTML document  ^
              object         |-- window object
window.content.document.defaultView.wrappedJSObject.testFunction();