2011-03-01 144 views
4

我試圖做一些事情,每當一個新的標籤打開,無論是通過Firefox啓動和當Firefox新手啓動後添加。我一直在下面的例子在:聽標籤打開/關閉和處理現有的標籤

https://developer.mozilla.org/en/Code_snippets/Tabbed_browser

所以我

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

function tabAdded(event) { 
alert("tabAdded!"); 
var browser = gBrowser.getBrowserForTab(event.target); 
browser.pollingService = new PollingService(createGuid()); 
browser.pollingService.start(); 
} 

而且我有密切類似的功能。這適用於標籤實際打開/關閉的情況,但我遇到了一些問題。

首先,當Firefox打開時,它的初始選項卡已經打開,但tabAdded事件從不會爲它啓動。同樣,當我關閉Firefox時,它從不會觸發TabClos​​e爲這些標籤。

在這種情況下,看起來正確的做法是遍歷gBrowser.tabContainer中的所有選項卡,並將它們添加到它們,並在Firefox關閉時執行類似的操作。不幸的是,我不太清楚如何知道Firefox何時關閉(也可能有更好的方法來處理這個問題,但我想不出來)。

其次,有時當我的初始化腳本運行時,gBrowser.tabContainer可能是未初始化的;是否有一個特定的事件我應該傾聽,以瞭解何時可以安全地將監聽器添加到tabContainer?

回答

4

使用加載事件偵聽器爲窗口提供時間以準備添加Tab事件偵聽器併爲現有選項卡創建輪詢服務。然後使用卸載事件偵聽器來執行清理。

+0

但是,每當網頁發生變化時,不要在裝入/卸載事件時啓動,而是不要啓動裝入/卸載事件?如何區分頁面更改時間和Firefox實際打開/關閉的時間以瞭解何時執行初始化/清理? – DivineWolfwood 2011-03-02 18:20:55

+0

如果你添加一個普通的事件監聽器到(chrome)窗口,那麼它只會看到chrome窗口的加載和卸載事件,因爲它們不會從內容窗口冒出來。 (如果你真的需要它們,你仍然可以在內容窗口捕獲它們。) – Neil 2011-03-02 19:59:17

+0

啊,這似乎適用於打開,但我仍然在卸載時遇到問題。我很喜歡:\t \t window.addEventListener(「beforeunload」,this.handleTabClos​​ing,false);但handleTabClos​​ing中的警報永遠不會實際觸發; beforeunload是我想在這裏聽的事件,對吧? – DivineWolfwood 2011-03-02 21:50:07

相關問題