在 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
并且它应该可以工作。
在 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
并且它应该可以工作。