【发布时间】:2010-11-28 03:24:01
【问题描述】:
为了通知用户可能的冲突,我想让我的插件检查是否安装了另一个插件并启用。如果是这样,我可以根据用户的要求禁用它或我自己的:
function disableExtension(id) {
var man = Components.classes["@mozilla.org/extensions/manager;1"];
if (man) {
man = man.getService(Components.interfaces.nsIExtensionManager);
}
if (man) {
man.disableItem(id);
} else {
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonByID(id, function(addon) {
addon.userDisabled = true;
});
}
}
但我首先当然要检查是否安装了某个其他附加组件。目前,我这样做如下:
if (Application.extensions) {
// Gecko 1.9.2 and older
ext = Application.extensions.get(id);
if (ext) {
// TODO check if extension is also enabled
disableExtension(id);
}
} else {
// Gecko 2.0.0 and newer
Application.getExtensions(function(extensions) {
ext = extensions.get(id);
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonByID(id, function(addon) {
if (!addon.userDisabled) {
disableExtension(id);
}
});
})
}
Firefox 4 的代码(else-statement)运行良好。对于旧版本的 Firefox(3.5 和更早版本),我一生都无法弄清楚如何确定是否确实安装了扩展。
有人知道怎么做吗?
【问题讨论】:
-
唯一想到的就是运行
extensions.ini并寻找扩展的getInstallLocation(),但我一点也不喜欢这种方法。
标签: javascript firefox firefox-addon xpcom