我正在开发一个谷歌浏览器扩展程序,它会根据您的IP本地化更改其图标。我面临着扩展图标更改后刷新的问题。
由于我的background.js
文件中的这个命令,图标实际上正在改变。
chrome.browserAction.setIcon ( { path: 'france.png' } );
不幸的是,setIcon
命令似乎是异步的。图标更改实际上会在代码更改后几秒钟出现。有办法强制chrome刷新图标吗?
许多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改变了。
我应该在某个地方做错了什么,但实际上,当我删除所有内容时,我不知道这种延迟可能来自哪里。
1条答案
按热度按时间8fq7wneg1#
**问题:**Chrome浏览器在标签页导航时会临时重置您指定的browserAction图标,这是一个bug。
**解决方法:**您必须在后台脚本中使用webNavigation事件在每个选项卡中显式更新图标:
当然,你的manifest.json应该有
webNavigation
权限。**警告!**Chrome不会缓存图标的imageData,并且每次调用setIcon时都会重新计算它,这需要大约10毫秒,所以让我们自己缓存它。请注意,这也将启动事件页面(或ManifestV 3中的service worker),这是非常浪费的(至少50 ms),因此您可能需要prolong its lifetime artificially。