Как расширение Firefox может получить свой номер версии программным путем?

Как я могу программно получить свой собственный номер версии расширения Firefox с помощью Javascript?

У моего расширения есть файл 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>

Ответ 1

У меня нет полного ответа, но я нашел Расширенное расширение и посмотрел исходный код, как это казалось хорошая отправная точка, и из Googling некоторые из методов, в которых я нашел этот фрагмент на MDC. Ключевой бит кода выглядит следующим образом:

var gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"]
                        .getService(Components.interfaces.nsIExtensionManager);
var current = gExtensionManager.getItemForID("[email protected]").version;

Вам нужно заменить [email protected] на соответствующий идентификатор для вашего расширения.

Для Firefox 4 требуется другой код, см. другой ответ.

Ответ 2

В 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("[email protected]", function(addon) {
        alert("My extension 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("[email protected]");
    alert("My extension version is " + addon.version);
}

Ответ 3

С дополнительным SDK его просто:

var version = require("sdk/self").version;

Ответ 4

В веб-расширениях используйте следующее:

browser.runtime.getManifest().version