2014-11-05 98 views
4

我正在開發一個Google Chrome瀏覽器擴展程序,根據您的IP本地化來更改其圖標。在擴展程序的圖標更改後,我遇到刷新問題。刷新Chrome擴展程序的圖標更改

圖標實際上是由於我的background.js文件中的此命令而改變的。

chrome.browserAction.setIcon ({ path: 'france.png' }); 

不幸的是,setIcon命令似乎是異步的。代碼更改後實際出現幾秒鐘圖標更改。有沒有辦法強制鉻來刷新圖標?

許多Chrome擴展似乎能夠控制這個,但我無法找出他們如何管理這一點。


以下是詳細信息:

爲了更清楚地瞭解,我刪除了從不同文件中的所有我javascript代碼,除了setIcon線。這是聲明我的javascript文件的清單行。

"background": { "scripts": [ "jquery.min.js", "popup.js", "background.js"] }, 

popup.js:現在空 background.js:只有這兩個以下行:

console.log ("I'm background script"); 
chrome.browserAction.setIcon({path: 'france.png'}); 

與擴展管理器擴展重裝後,我點擊它的圖標。 Chrome使靜態的html彈出窗口出現並加載background.js文件。作爲證明,文本立即出現在控制檯窗口中。

但是我必須在圖標擴展上多做幾次才能看到它被chrome改變了。

我應該在某個地方做錯事,但實際上,當我把所有東西都移除時,我不知道這種延遲可能來自哪裏。

+0

這聽起來不合適。特別是「幾秒鐘」的部分。你確定問題不在其他地方嗎?請添加更多關於你的代碼的細節。 – Xan 2014-11-05 15:16:28

+0

請用新信息編輯您的問題,而不是在評論中添加它。 – Xan 2014-11-05 23:11:21

+0

按要求完成。謝謝 – Ipunchu 2014-11-05 23:18:01

回答

0

要立即更新圖標處理所有相關webNavigation在後臺腳本事件:

chrome.webNavigation.onCommitted.addListener(updateIcon); 
chrome.webNavigation.onHistoryStateUpdated.addListener(updateIcon); 
chrome.webNavigation.onBeforeNavigate.addListener(updateIcon); 

function updateIcon(details) { 
    if (details.frameId != 0) { 
     return; // only update the icon for main page, not iframe/frame 
    } 
    chrome.browserAction.setIcon({ 
     path: {19: "france-19.png", 38: "france-38.png"}, 
     tabId: details.tabId 
    }); 
} 

你的manifest.json應該有webNavigation許可,當然。

相關問題