Firefox addon sdk 在JPM中使用操作系统和颜色主题特定图标作为切换按钮

Firefox addon sdk 在JPM中使用操作系统和颜色主题特定图标作为切换按钮,firefox-addon-sdk,togglebutton,Firefox Addon Sdk,Togglebutton,在Firefox中,根据主题和操作系统的不同,图标是不同的。例如: 在Linux上: 在Windows 10上: (来源:) 轻量级主题: 请注意,Windows 10上的图标是如何变暗的,而角色上的图标是如何变白的(非常明显) 问题是,在Firefox菜单中添加了一个新按钮(确切地说是togglebutton),现在只有一个静态图标。 我知道JPM(或CFX,几乎是一样的东西)上有一个插件实现了这种行为,但我不记得是哪一个,也不记得是如何实现的。 如何根据操作系统和主题更改图标?找到了它

在Firefox中,根据主题和操作系统的不同,图标是不同的。例如:

在Linux上:
在Windows 10上:
(来源:)

轻量级主题:

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

问题是,在Firefox菜单中添加了一个新按钮(确切地说是togglebutton),现在只有一个静态图标。
我知道JPM(或CFX,几乎是一样的东西)上有一个插件实现了这种行为,但我不记得是哪一个,也不记得是如何实现的。

如何根据操作系统和主题更改图标?

找到了它。这是Mozilla的插件兼容性报告程序

将此添加到启动代码中:

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
放置,它应该可以工作。

找到了它。这是Mozilla的插件兼容性报告程序

将此添加到启动代码中:

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
放置,它应该可以工作