Firefox扩展如何以编程方式获得自己的版本号?

Mat*_*Mat 11 javascript firefox firefox-addon

如何使用Javascript以编程方式获取我自己的Firefox扩展的版本号?

我的扩展程序有一个install.rdf文件,其中包含与下面类似的版本号.我想提取<em:version>标签的内容.

<?xml version="1.0" encoding="UTF-8"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
 xmlns:em="http://www.mozilla.org/2004/em-rdf#">
  <Description about="urn:mozilla:install-manifest">
    ...
    <em:version>1.0</em:version>
    ...
  </Description>
</RDF>
Run Code Online (Sandbox Code Playgroud)

Rya*_* Li 12

在Firefox 4(Gecko 2)中,API已经改变,所以如果你需要移植到Firefox 4,这就是代码(从这里开始):

try {
    // Firefox 4 and later; Mozilla 2 and later
    Components.utils.import("resource://gre/modules/AddonManager.jsm");
    AddonManager.getAddonByID("extension-guid@example.org", function(addon) {
        alert("My extension's version is " + addon.version);
  });
}
catch (ex) {
    // Firefox 3.6 and before; Mozilla 1.9.2 and before
    var em = Components.classes["@mozilla.org/extensions/manager;1"]
             .getService(Components.interfaces.nsIExtensionManager);
    var addon = em.getItemForID("extension-guid@example.org");
    alert("My extension's version is " + addon.version);
}
Run Code Online (Sandbox Code Playgroud)


rob*_*rtc 8

我还没有得到完整的答案,但我发现扩展扩展,并看看源代码,因为它似乎是一个很好的起点,并从谷歌上搜索一些在该方法中,我发现在MDC这个片段.代码的关键点似乎是这样的:

var gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"]
                        .getService(Components.interfaces.nsIExtensionManager);
var current = gExtensionManager.getItemForID("extension@guid.net").version;
Run Code Online (Sandbox Code Playgroud)

您必须extension@guid.net使用适合您的扩展程序的ID进行替换.

Firefox 4需要不同的代码,请参阅其他答案.