Как расширение 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>

4 ответа

Решение

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

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

Вам придется заменить extension@guid.net с соответствующим идентификатором для вашего добавочного номера.

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

В 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);
}

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

browser.runtime.getManifest().version

С надстройкой SDK это просто, как:

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

Другие вопросы по тегам