如何在Firefox扩展中访问新打开标签页的窗口对象?

7

我正在尝试将一个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)"将脚本附加到工具栏按钮时,可以很好地将其附加到当前页面,但我不知道如何访问新打开的选项卡中的窗口,或者是否应该去掉窗口并以另一种方式访问文档。


var newtabwindow = event.target; 不起作用吗? - Sukima
2
从您的描述来看,Mozilla的Add-on SDK更适合这项工作。您可以使用page-mod将内容脚本附加到任何URL匹配模式的网页上,或使用tabs模块。 - ZER0
1个回答

3
您正在寻找 contentWindow,这是 browser 元素的一个属性。
给定一个 tab,调用 gBrowser.getBrowserForTab 获取与该 tab 相关联的 browser 元素。然后访问 browser 元素的 contentDocumentcontentWindow 属性(这些等同于您应该已经熟悉的 documentwindow 对象)。
此外,如果我没记错的话,您还需要同时监听 contentWindow"load" 事件以及 tab 的事件。

1
我发现页面加载的示例不需要监听TabOpen事件,而且我必须为窗口使用一个load事件监听器。 - user2253229

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接