2010-11-18 38 views
3

我正在开发一个将状态栏中放置按钮的Firefox扩展。点击按钮后,扩展插入一些JavaScript到当前页面。这个Javascript有一个我想用一些参数调用的函数。我已经管理注入代码,我通过Firebug检查了页面,并验证JS已经被注入。如何在我的扩展中的页面中调用Javascript函数?在开发Firefox扩展时在页面中执行注入的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文件中的代码,我要去注入。即visibility.js

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

谢谢。

回答

4

这工作。我不知道技术问题。我从Felix获得了部分解决方案,其中一部分来自here

window.content.document.defaultView.wrappedJSObject.testFunction(); 
2

如果你在你注入的代码声明一个全局变量(或明确设置window对象的属性),那么一个办法做得到从您的扩展这个元素的引用,是通过gBrowser对象:

gBrowser.contentDocument.defaultView.yourObject 
      ^-- HTML document^
       object   |-- window object 

请注意,当您在代码中使用windowdocument时。根据上下文的不同,它可能指向Firefox窗口或网站窗口对象。

+0

嗨费利克斯。我无法弄清楚你的意思。我尝试阅读文档,即您指出的页面,但我仍然无法完全理解。我尝试了'window.content.document。<函数名称>'但那不起作用。你会碰巧有一个简单的例子或什么?谢谢。 – 2010-11-18 20:38:43

+0

@Mridang Agarwalla:你很近。 'window.content.document'应该和'gBrowser.contentDocument'一样。但是这给了你网站的文档对象。全局变量总是网站的“窗口”对象的属性。 'document.defaultView'应该给你那个对象。试试'window.content.document.defaultView。<函数名称>'。 – 2010-11-18 23:08:51

+0

再次菲利克斯。我似乎还无法访问它。我得到以下错误 - 'window.content.document.defaultView.testFunction'不是一个函数。我尝试从JavaScript控制台调用'testFunction',它工作但扩展仍然无法访问它。以任何方式添加或修改我注入的Javascript代码?再次感谢。 – 2010-11-19 07:47:36