Чтобы проинформировать пользователя о возможных конфликтах, я хотел бы, чтобы мое дополнение проверяло, установлено ли другое дополнение и включено ли . Если так, я могу отключить его или свой собственный по завещанию пользователя:
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
) работает нормально. Для более старых версий Firefox (3.5 и старше) я хоть убей не могу понять, как определить, действительно ли расширение установлено.
Кто-нибудь знает, как это сделать?