2009-10-13 34 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

相關問題