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