2013-05-05 66 views
0

我試圖切換我的pageAction的圖標。這是我使用的代碼:Chrome擴展程序pageAction.setIcon不可靠

var activated = new Boolean(); 

chrome.pageAction.onClicked.addListener(function(tab) { 
if(!activated){ 
     chrome.pageAction.setIcon({tabId: tab.id, path: 'icons/expanded.png'}); 
     activated = true; 
     alert("activated"); 
    }else{ 
     chrome.pageAction.setIcon({tabId: tab.id, path: 'icons/expand.png'}); 
     activated = false; 
     alert("not activated"); 
    } 
}); 

雖然這工作的大部分時間,有時它報告了變化的狀態,但不切換圖標。 有人知道爲什麼會發生這種情況嗎?

+0

通過導航或使用'history.pushState/replaceState' API,選項卡的位置是否更改?這會導致圖標消失。 – 2013-05-05 19:09:52

+0

這不是問題,圖標不會消失,有時按它時它不會更改爲其他圖像 – Niek 2013-05-06 14:09:55

+0

即使您點擊兩次...?很可能默認的「激活」狀態與相應的圖標路徑不匹配。您必須記住每個選項卡的狀態而不是全局狀態。 – 2013-05-06 14:11:52

回答

0

感謝Rob W,現在問題已解決。這是工作代碼:

var activated = new Array(); 

function checkForValidUrl(tabId, changeInfo, tab) { 
    chrome.pageAction.show(tabId); 
    activated[tabID] = false; 
}; 

chrome.pageAction.onClicked.addListener(function(tab) { 
if(!activated[tab.id]){ 
     chrome.pageAction.setIcon({tabId: tab.id, path: 'icons/expanded.png'}); 
     activated[tab.id] = true; 
     alert("activated"); 
    }else{ 
     chrome.pageAction.setIcon({tabId: tab.id, path: 'icons/expand.png'}); 
     activated[tab.id] = false; 
     alert("not activated"); 
    } 
}); 

在使用相同的狀態,每打開的選項卡代替,現在的存儲陣列中的每一個人選項卡中的狀態,並使用。