2014-11-05 46 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许可,当然。

相关问题