Google chrome extension Chrome扩展图标更改问题
我正在开发一个Chrome扩展,在动态更改图标时遇到了一个奇怪的问题 在我的popup.html中,我有一个按钮,通过单击该按钮,我想在浏览器中更改扩展的图标。例如,从彩色到黑白(当应用程序处于非活动状态时) 因此,负责这项工作的职能是:Google chrome extension Chrome扩展图标更改问题,google-chrome-extension,popup,icons,Google Chrome Extension,Popup,Icons,我正在开发一个Chrome扩展,在动态更改图标时遇到了一个奇怪的问题 在我的popup.html中,我有一个按钮,通过单击该按钮,我想在浏览器中更改扩展的图标。例如,从彩色到黑白(当应用程序处于非活动状态时) 因此,负责这项工作的职能是: function toggleActivated(){ localStorage.isActive = toBool(localStorage.isActive) ? false : true; $('#activate
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()
之间存在冲突?听起来像chrome.browserAction.setIcon
是异步启动的,但弹出窗口在完成之前就关闭了。您可以尝试在关闭前添加500毫秒设置超时
您还应该在提交错误报告。这听起来像是chrome.browserAction.setIcon
被异步触发,但弹出窗口在完成之前关闭。您可以尝试在关闭前添加500毫秒设置超时
您还应该在提交错误报告。我知道这是一个老问题,但我也遇到了同样的问题,他说的chrome.browserAction.setIcon
被异步调用是正确的。但我不认为设置超时是最好的答案
如果检查,您可以看到此方法将函数回调作为参数。您应该在这里调用window.close()
。像这样:
chrome.browserAction.setIcon({ path: icon_path }, function() {
window.close();
});
更新:
正如下面的评论所指出的,您可以向函数传递一个tabId参数来限制更改的范围。我知道这是一个老问题,但我也遇到了同样的问题,他说的chrome.browserAction.setIcon
被异步调用是正确的。但我不认为设置超时是最好的答案
如果检查,您可以看到此方法将函数回调作为参数。您应该在这里调用window.close()
。像这样:
chrome.browserAction.setIcon({ path: icon_path }, function() {
window.close();
});
更新:
正如下面的注释所指出的,您可以向函数传递一个tabId参数来限制更改的范围。是的,就是这样,我添加了setTimeout(function(){window.close();},100);是的,就是这样,我添加了setTimeout(function(){window.close();},100);但这是在所有选项卡中更改图标,我只想在发生事件的选项卡上更改。使用tabid chrome.browserAction.setIcon({path:icon_path,tabid:tab_id},function(){window.close();})完成此操作;很酷,很高兴你能修好它。我将更新我的答案以提及tabid参数。但这是在所有选项卡中更改图标,我只想更改发生事件的选项卡上的图标。使用tabid chrome.browserAction.setIcon({path:icon_path,tabid:tab_id},function(){window.close();})完成此操作;很酷,很高兴你能修好它。我将更新我的答案,以提及tabid参数。