Узнать путь к папке аддона в Thunderbird API

Я модифицирую аддон для Thunderbird и нашел путь к аддону, жестко закодированному в одном из файлов javascript. Мне это показалось неряшливым, и я подумал, что этот путь можно найти программно. Однако, после долгих поисков в гугле, я все еще не могу найти ответ на этот вопрос.

Знаете ли вы, как я могу узнать путь к папке (содержащей install.rdf) аддона Thunderbird?


person janoliver    schedule 18.10.2012    source источник


Ответы (1)


Для этого можно использовать AddonManager API:

Components.utils.import("resource://gre/modules/AddonManager.jsm");

AddonManager.getAddonByID("[email protected]", function(addon)
{
  var uri = addon.getResourceURI("install.rdf");
  if (uri instanceof Components.interfaces.nsIFileURL)
  {
    var file = uri.file;
    alert(file.parent.path);
  }
});

Для справки: дополнение, nsIFileURL, nsIFile.

В приведенном выше коде предполагается, что расширение распаковывается при установке, ваш предшественник, вероятно, добавил с <em:unpack>true</em:unpack> по install.rdf. Обычно этот флаг не следует указывать, так как лучше оставить расширение упакованным на диске для повышения производительности. Если вам просто нужно прочитать файл из вашего расширения, вы можете использовать для этого XMLHttpRequest, не требуя, чтобы это был физический файл на диске:

Components.utils.import("resource://gre/modules/AddonManager.jsm");

AddonManager.getAddonByID("[email protected]", function(addon)
{
  var uri = addon.getResourceURI("example.txt");
  var request = new XMLHttpRequest("GET", uri.spec);
  request.addEventListener("load", function()
  {
    alert(request.responseText);
  }, false);
  request.send();
});
person Wladimir Palant    schedule 19.10.2012
comment
Но есть одна вещь: мне нужно запустить скрипт на Python, поэтому второй фрагмент кода у меня не работает. Но тем не менее, это только начало, и я посмотрю на это. Спасибо еще раз. - person janoliver; 19.10.2012
comment
@janoliver: Да, если вы хотите запустить код, вам нужно либо распаковать расширение, либо сначала скопировать скрипт Python во временный каталог. - person Wladimir Palant; 19.10.2012