我正在开发一个Google Chrome扩展程序,根据您的IP本地化更改其图标。我在扩展图标更改后遇到刷新问题。
由于我的background.js
文件中的此命令,图标实际上正在改变。
chrome.browserAction.setIcon ( { path: 'france.png' } );
不幸的是,setIcon
命令似乎是异步的。图标更改实际上在代码更改后几秒钟出现。有没有办法强制chrome刷新图标?
许多Chrome扩展程序似乎能够控制这一点,但我无法找到他们如何管理它。
以下是更多详情:
为了更清楚地理解,我从javascript
行以外的不同文件中删除了所有setIcon
代码。这是Manifest行,它声明了我的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 :(得分: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
的许可。