2009-10-13 53 views
1

我正在写一个Firefox扩展。我希望在新标签打开时执行我的代码。如何将事件“TabOpen”添加到Firefox扩展的所有窗口中?

我已经试过这样:

for (var i=0; i<Application.windows.length; i++) { 
    var w = Application.windows[i]; 
    w.events.addListener("TabOpen", function(event){ 
    alert('tab #'+w.activeTab.index +' opened'); 
    }); 
} 

它不工作的权利,如果windows.length> 1。例如,我们有两个窗口。我为每个窗口打开新标签和事件触发2次。我只想为当前窗口调用一个事件。

回答

2

没有燃料:https://developer.mozilla.org/en/Code_snippets/Tabbed_browser#Notification_when_a_tab_is_added_or_removed。我喜欢这样比使用Application.activeWindow更好,因为从查看代码是不能保证的activeWindow总是指您的代码执行的同一个窗口(如果它们不同,最终会难以重现问题)。

你原来的代码不起作用的原因是你大概把你的代码放在一个覆盖到主浏览器窗口的脚本中。这样的代码在用户打开的浏览器窗口的每个实例中执行。所以当你打开第二个窗口时,循环再次执行并为第一个窗口和第一个(仅)侦听器添加第二个侦听器到第二个窗口。

1

回答我自己的问题:

window.addEventListener('load', function(){ 

    var w = Application.activeWindow; 
    w.events.addListener("TabOpen", function(event){ 
    alert('tab #'+w.activeTab.index +' opened'); 
    }); 

}, false); 
0

没有办法,我没有那个工作我akways连接它gbrowser,这是我要做的事: https://gist.github.com/Noitidart/8673632

在那里我附上domContentLoad我还附上TabOpen

+0

如果你有一个新的问题,请咨询它通过点击[Ask Question](http://stackoverflow.com/questions/ask)按钮。如果有助于提供上下文,请包含此问题的链接。 – rene 2014-02-09 22:24:11

+0

确定thx man im new to stack – Noitidart 2014-02-10 02:25:59

相关问题