【问题标题】:How can I access a newly-opened tab's window object? [in a firefox extension]如何访问新打开的选项卡的窗口对象? [在 Firefox 扩展中]
【发布时间】:2013-04-06 22:05:17
【问题描述】:

我正在尝试将 Greasemonky 脚本转换为 Firefox 的扩展程序,并且我正在尝试使我的扩展程序在打开新选项卡时自动将简单脚本附加到任何网页。我正在从 Greasemonkey 转换脚本,因为我想利用高级首选项和菜单选项。

我使用这个访问标签:

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; 不起作用吗?
  • 从您的描述看来,Mozilla 的Add-on SDK 似乎更适合该工作。您可以使用 page-mod 将内容脚本附加到 URL 匹配模式的任何网页,或使用 tabs 模块。

标签: javascript firefox-addon xul


【解决方案1】:

您正在寻找contentWindow,它是browser 元素的属性。

给定tab,调用gBrowser.getBrowserForTab 以获取与tab 关联的browser 元素。然后访问browser 元素的contentDocumentcontentWindow 属性(这些等同于您应该已经熟悉的documentwindow 对象)。

另外——如果我没记错的话——除了监听tab 的事件之外,你还需要监听contentWindow"load" 事件。

【讨论】:

  • 我发现On page load 的示例不再需要监听 TabOpen 事件,是的,我必须为窗口使用加载事件监听器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 2015-04-19
  • 1970-01-01
  • 2014-02-02
相关资源
最近更新 更多