2013-04-06 29 views
6

我试图将Greasemonky脚本转换为Firefox的扩展,我试图让我的扩展程序自动将一个简单的脚本附加到任何网页时,打开一个新的选项卡。我正在从Greasemonkey转换脚本,因为我想利用高级首选项和菜单选项。如何访问新打开的选项卡的窗口对象? [在Firefox的扩展]

我访问使用的标签是:

var container = gBrowser.tabContainer; 
container.addEventListener("TabOpen", tabAdded, false); 

function tabAdded(event) { 
var newtabwindow = event.target.____ //I don't know what goes here 
//attach script to newtabwindow 
} 

,我的目标是将脚本追加到文档中的新标签,一旦加载使用此功能:

function scriptrunner(targetwindow) { 
var myScript = targetwindow.content.document.createElement('script'); 
    myScript.type = 'text/javascript'; 
    myScript.setAttribute('src','chrome://addonname/content/addonscript.js'); 
    targetwindow.content.document.getElementsByTagName('head')[0].appendChild(myScript); 
} 

此功能可以使用oncommand =“scriptrunner(window)”附加到工具栏按钮时将脚本附加到当前页面,但我不知道如何在新打开的选项卡中访问窗口,或者如果我应该切掉从等式的窗口并以另一种方式访问​​文档。

+0

'var newtabwindow = event.target;'不工作? – Sukima 2013-04-06 23:02:27

+2

从你的描述看来,Mozilla的[附加SDK](https://addons.mozilla.org/en-US/developers/docs/sdk/latest/)更适合这项工作。您可以使用[page-mod](https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/page-mod.html)将内容脚本附加到任何网页URL匹配模式,或使用[tabs](https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/tabs.html)模块。 – ZER0 2013-04-07 01:07:23

回答

2

您正在查找contentWindow,它是browser元素的财产。

给定tab,请致电gBrowser.getBrowserForTab获取与tab相关联的browser元素。然后访问browser元素的contentDocumentcontentWindow属性(这些相当于您应该已经熟悉的documentwindow对象)。

另外 - 如果我没有弄错 - 除了听tab的事件之外,您还需要听取contentWindow"load"事件。

+1

我发现[在页面加载](https://developer.mozilla.org/en-US/docs/Code_snippets/On_page_load)的示例删除了需要监听TabOpen事件,是的,我不得不使用加载窗口的事件侦听器。 – user2253229 2013-04-14 03:19:18