Проверьте, включена ли надстройка Firefox 3.5

Чтобы проинформировать пользователя о возможных конфликтах, я хотел бы, чтобы мое дополнение проверяло, установлено ли другое дополнение и включено ли . Если так, я могу отключить его или свой собственный по завещанию пользователя:

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 и старше) я хоть убей не могу понять, как определить, действительно ли расширение установлено.

Кто-нибудь знает, как это сделать?

12
задан Paul Lammertsma 30 November 2010 в 22:47
поделиться