我正在开发Chrome扩展程序,并且在动态图标更改方面存在一个奇怪的问题。
在我的popup.html中,我点击了一个按钮,我想在浏览器中更改扩展图标。例如。从彩色的一个到黑色和白色(当应用程序处于非活动状态时)。
所以负责这个的功能:
function toggleActivated(){
localStorage.isActive = toBool(localStorage.isActive) ? false : true;
$('#activate-disactivate span').text(toBool(localStorage.isActive) == false ? 'Включить' : 'Выключить');
chrome.browserAction.setIcon({path: toBool(localStorage.isActive) ? '48.png' : '48_bw.png'});
//window.close();
}
但问题是我想在图标改变后关闭弹出窗口。如果我在最后使用window.close()
- 那么图标不会更改,但如果它被注释掉 - 那么图标就会改变。
为什么chrome.browserAction.setIcon()
和window.close()
之间存在冲突?
答案 0 :(得分:2)
听起来chrome.browserAction.setIcon
异步被解雇但是弹出窗口在完成之前就已经关闭了。您可以尝试在关闭前添加500毫秒setTimeout
。
您还应该在new.crbug.com提交错误报告。
答案 1 :(得分:2)
我知道这已经过时了,但我遇到了同样的问题,当他chrome.browserAction.setIcon
被异步调用时abraham是正确的。但我不认为设置超时是最好的答案。
如果查看setIcon documentation,可以看到此方法将函数回调作为参数。那是你应该拨打window.close()
的地方。像这样:
chrome.browserAction.setIcon({ path: icon_path }, function() {
window.close();
});
更新: 正如下面评论中指出的niraj.nijju,您可以将tabId参数传递给setIcon函数以限制更改的范围。