刷新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
文件。作为证明,文本立即出现在控制台窗口上。
但我不得不在图标扩展上再clic几次,才能看到它被chrome更改了。
我应该在某个地方做错什么,但事实上,当我删除所有内容时,我不知道这种延迟可能是从哪里来的。
问题:Chrome在导航选项卡时临时重置您指定的浏览器操作图标,这是一个错误。
解决方法:您必须使用后台脚本中的webNavigation事件显式更新每个选项卡中的图标:
当然,您的manifest.json应该具有webNavigation
权限。
警告Chrome不会缓存图标的imageData,每次调用setIcon时都会重新计算它,大约需要10毫秒,所以让我们自己缓存它。请注意,这也会启动事件页面(或ManifestV3中的服务工作者),这是非常浪费的(至少50ms),因此您可能希望人为地延长其寿命。
const iconPath = 'france.png';
let iconData;
chrome.webNavigation.onCommitted.addListener(updateIcon);
chrome.webNavigation.onHistoryStateUpdated.addListener(updateIcon);
chrome.webNavigation.onBeforeNavigate.addListener(updateIcon);
(async () => {
chrome.browserAction.setIcon({
imageData: iconData = await loadImage(iconPath),
});
})();
function updateIcon(details) {
// only update the icon for main page, not iframe/frame
if (details.frameId != 0) return;
chrome.browserAction.setIcon({
imageData: iconData,
tabId: details.tabId,
});
}
async function loadImage(url) {
const img = await createImageBitmap(await (await fetch(url)).blob());
const {width: w, height: h} = img;
const canvas = new OffscreenCanvas(w, h);
const ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0, w, h);
return ctx.getImageData(0, 0, w, h);
}
- 更新选项卡开关/更改上的chrome扩展图标
- 在Chrome扩展程序图标中创建一个切换开关,以打开/关闭JavaScript
- 有没有办法查看Chrome扩展程序的图标/按钮是否已隐藏
- 使用chrome扩展(HTML、CSS、JavaScript)向输入字段添加可点击的图标/按钮
- 获取Chrome pageAction图标以显示JSON中的URL列表
- 如何在chrome中获取书签图标
- Chrome 扩展程序,用于通过在匹配的链接旁边添加图标来操作网页
- 通过浏览器操作/图标禁用/启用Chrome扩展程序
- 刷新chrome扩展的图标更改
- Fabric js自定义旋转图标仅在iphone'谷歌chrome浏览器
- 当chrome最小化时,使windows任务栏上的chrome图标发光
- Chrome扩展:通过编程设置浏览器操作图标,使图标像素化
- 如何在getusermedia中从firefox和chrome中删除音频视频通话图标
- 如何选择性地显示Chrome扩展'的工具栏图标
- Chrome扩展-在单击/悬停时更改弹出图标
- 如何在隐身模式下为chrome扩展启用pageAction图标
- 如何改变一个contentscript变量点击Chrome扩展的图标
- 如何动态更改chrome扩展图标
- 打开chrome扩展窗口右键单击,而不是浏览器的扩展图标
- Chrome扩展选项卡图标