Chrome扩展程序图标更改问题

时间:2012-02-08 10:14:42

标签: google-chrome-extension popup icons

我正在开发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()之间存在冲突?

2 个答案:

答案 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函数以限制更改的范围。