gpt4 book ai didi

javascript - 检查是否启用了 Firefox 3.5 附加组件

转载 作者:可可西里 更新时间:2023-11-01 02:09:33 26 4
gpt4 key购买 nike

为了通知用户可能存在的冲突,我想让我的插件检查是否安装了另一个插件并启用。如果是这样,我可以根据用户的要求禁用它或我自己的:

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 及更早版本),我终究无法弄清楚如何确定扩展是否确实已安装。

有人知道怎么做吗?

最佳答案

答案很简单;我忽略了 extIExtensionenabled 属性。

我是这样解决的:

var ext;
if (typeof Application != 'undefined') {
if (Application.extensions) {
// Gecko 1.9.0 - 1.9.2
ext = Application.extensions.get(id);
if (ext) {
if (ext.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);
}
});
})
}
} else {
// Gecko 1.8.0
var extMgr = Cc["@mozilla.org/extensions/manager;1"].getService(Ci.nsIExtensionManager);
if (extMgr) {
ext = extMgr.getItemForID(id);
}
var extMgrDs = extMgr.datasource;
if (extMgrDs) {
var rdfSvc = Cc["@mozilla.org/rdf/rdf-service;1"].getService(Ci.nsIRDFService);
if (rdfSvc && ext) {
var source = rdfSvc.GetResource("urn:mozilla:item:" + ext.id);
var property = rdfSvc.GetResource("http://www.mozilla.org/2004/em-rdf#isDisabled");
var target = rdfSvc.GetLiteral("true");
var disabled = extMgrDs.HasAssertion(source, property, target, true);
if (!disabled) {
disableExtension(id);
}
}
} else if (typeof className != "undefined") {
// Opens the add-on window
BrowserOpenAddonsMgr();
}
}

disableExtension() 是:

disableExtension: function(id) {
var man = Components.classes["@mozilla.org/extensions/manager;1"];
if (man) {
man = man.getService(Components.interfaces.nsIExtensionManager);
}
if (man) {
man.disableItem(id);
restart();
} else {
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonByID(id, function(addon) {
addon.userDisabled = true;
restart();
});
}
}

restart() 是:

restart: function() {
var appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"];
if (appStartup) {
appStartup = appStartup.getService(Components.interfaces.nsIAppStartup);
}
if (appStartup) {
appStartup.quit(appStartup.eAttemptQuit | appStartup.eRestart);
} else if (typeof Application != 'undefined') {
if (Application.restart) Application.restart();
}
}

这还没有在 Firefox 1.0-1.5 上测试过,但适用于:

  • 火狐 4.0b7
  • 火狐 3.6
  • 火狐 3.5
  • 火狐 3.0
  • 火狐 2.0

helping me out 归功于 Atte Kemppilä。

关于javascript - 检查是否启用了 Firefox 3.5 附加组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4295163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com