2013-10-05 25 views
1

我寫了一個擴展,它在網站上更改他的圖標,匹配if子句。 請看:Google擴展:標籤事件 - 更改窗口?

chrome.tabs.onActivated.addListener(
    function (activeInfo) { 
      chrome.tabs.get(activeInfo.tabId, function(tab){ 
       hosterRegExp(tab.url); //Function to change Icon 

     });  
    } 
); 

chrome.tabs.onUpdated.addListener(
    function checkHosts(tabId, changeInfo, tab) { 
     hosterRegExp(tab.url); //Function to change Icon 
} 
); 

每次活動標籤改變或標籤是越來越重載函數hosterRegExp被稱爲當前URL。這工作正常。

現在,這不適用於兩個窗口。如果我在兩個窗口之間切換,它不會調用hosterRegExp();這是因爲活動選項卡沒有重新加載,也不會更改活動選項卡。

另外我找不到另一個EventHandler來幫助我。 所以我必須檢查當前窗口ID?我不知道 - 請幫助我。

謝謝。

+0

['chrome.windows.onFocusChanged'](https://developer.chrome.com/extensions/windows.html#event-onFocusChanged) –

+0

您是否嘗試在'chrome的details參數中使用可選的tabId字段.browserAction.setIcon'?這樣,您只需要在選項卡更新上設置圖標,而不是在選項卡或窗口焦點更改上。 – rsanchez

+0

@rsanchez:我會做更多的設置圖標,這只是一個例子..我會嘗試通過onFocusChanged獲得解決方案。 – wernersbacher

回答

2

像RobW告訴我,我使用的是

chrome.windows.onFocusChanged 

API現在。

嗯,在我的情況下,它看起來就像這樣:

chrome.windows.onFocusChanged.addListener(function() 
{ 
    chrome.tabs.query({currentWindow: true, active: true}, function(tab) 
    { 
     hosterRegExp(tab[0].url); 
    }); 
}); 

我使用的查詢方法來獲得改變的焦點後的標籤。儘管在一個窗口中不可能有2個選項卡處於活動狀態,但陣列每次只有一個元素。

這並不美麗,如果有人有更好更乾淨的代碼,告訴我!