【发布时间】:2016-08-24 05:02:56
【问题描述】:
在 Chrome 51 中,隐身窗口现在具有深色工具栏背景,而之前的版本使用浅色背景。在这两种情况下,单个 16x16 图像通常无法提供良好的对比度:
当通过browserAction图标向用户显示信息时,扩展程序可以通过什么机制提供深色主题和浅色主题的图标,并根据当前工具栏颜色在它们之间切换?
【问题讨论】:
在 Chrome 51 中,隐身窗口现在具有深色工具栏背景,而之前的版本使用浅色背景。在这两种情况下,单个 16x16 图像通常无法提供良好的对比度:
当通过browserAction图标向用户显示信息时,扩展程序可以通过什么机制提供深色主题和浅色主题的图标,并根据当前工具栏颜色在它们之间切换?
【问题讨论】:
(目前)还没有这样简单的机制,而且对于清单来说,这听起来至少像 excellent feature request to make。
但可以通过检测隐身标签打开并替换该标签的浏览器操作图标来近似此情况。
var incognitoIcons = {
19: "incognito19.png",
38: "incognito38.png"
};
chrome.tabs.onCreated.addListener(function(tab) {
if (tab.incognito) {
chrome.browserAction.setIcon({
path: incognitoIcons,
tabId: tab.id
});
}
});
如果您使用的是 "split" incognito behavior(非默认),您可以简单地检测到并更改隐身实例的全局图标:
// Somewhere in background during initialization
if (chrome.extension.inIncognitoContext) {
chrome.browserAction.setIcon({path: incognitoIcons});
}
请注意,内容脚本始终可以依赖inIncognitoContext,因此如果您触发浏览器操作图标更改,您可以将其传递。
显然,您可以使用 imageData 而不是 path,就像您的情况一样。
您可能想在使用时检查 Chrome 版本;我不知道有比提到here 更好的方法。
【讨论】: