在 JPM 中使用 OS 和颜色主题特定图标作为切换按钮

Use OS and color theme specific icons for a toggle button in JPM

在 Firefox 中,根据主题和 OS,图标会有所不同。示例:

在 Linux 上:
在 Windows 10:
(来源:saranitus.com

轻量级主题:

请注意图标在 Windows 10 上是如何变暗而在人物角色上是白色的(非常明显)。

问题是,my addon 向 Firefox 菜单添加了一个新按钮(确切地说是一个切换按钮),目前只有一个静态图标。
我知道 JPM(或 CFX,几乎相同的东西)上有一个插件可以实现这种行为,但我不记得是哪一个,也不记得是怎么做到的。
如何根据 OS 和主题更改我的图标?

找到了。它是 Mozilla 的 Addon Compatiblity Reporter。

将此添加到您的启动代码中:

var {Cc, Ci, Cu} = require("chrome");

if ( Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator).getMostRecentWindow("navigator:browser").navigator.oscpu.indexOf("Windows NT 10.0") > -1 ) {
    var icontype = "Modern";
}
else if ( Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator).getMostRecentWindow("navigator:browser").navigator.oscpu.indexOf("Windows NT 6.3") > -1 || Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator).getMostRecentWindow("navigator:browser").navigator.oscpu.indexOf("Windows NT 6.2") > -1) {
    var icontype = "Metro";
}
else if ( Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator).getMostRecentWindow("navigator:browser").navigator.oscpu.indexOf("Windows NT 6.1") > -1 || Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator).getMostRecentWindow("navigator:browser").navigator.oscpu.indexOf("Windows NT 6.0") > -1) {
    var icontype = "Aero";
}
else if ( Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator).getMostRecentWindow("navigator:browser").navigator.oscpu.indexOf("Mac OS X") > -1 ) {
    var icontype = "Aqua";
}
else {
    var icontype = "Linux";

}

然后,在声明图标时,只需输入:

icon: {
  "16": "./" + icontype + "_16.png",
  "32": "./" + icontype + "_32.png"
},

因此,当您为 Mac OS X 创建一个图标时,将其设为 data/Aqua_16.png 并且它应该可以工作。