繁体   English   中英

刷新chrome扩展的图标更改

[英]Refreshing an icon change for chrome extension

我正在开发一个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改变了。

我应该在某处做错事,但实际上,当我删除所有内容时,我不知道这种延迟可能来自哪里。

要立即更新图标句柄,请在后台脚本中处理所有相关的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权限。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM