0

Thunderbird のアドオンを変更していて、javascript ファイルの 1 つにハードコードされたアドオンへのパスを見つけました。これは私にはずさんに思えたので、プログラムでこのパスを見つけることができなければならないと考えました。しかし、多くのグーグル検索の後、私はまだその質問に対する答えを見つけることができません.

install.rdfThunderbird アドオンのフォルダー (を含む) へのパスを見つける方法を知っていますか?

4

1 に答える 1

3

AddonManagerそのためのAPIを使用できます。

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

AddonManager.getAddonByID("foo@example.com", function(addon)
{
  var uri = addon.getResourceURI("install.rdf");
  if (uri instanceof Components.interfaces.nsIFileURL)
  {
    var file = uri.file;
    alert(file.parent.path);
  }
});

参考:アドオンnsIFileURLnsIFile

上記のコードの前提は、拡張機能がインストール時に解凍され、前のコードがおそらくに追加され<em:unpack>true</em:unpack>ていることinstall.rdfです。通常、このフラグは指定しないでください。拡張機能をディスクにパックしたままにしておくと、パフォーマンスが向上します。拡張機能からファイルを読み取る必要があるだけの場合XMLHttpRequestは、ディスク上の物理ファイルである必要はなく、そのために使用できます。

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

AddonManager.getAddonByID("foo@example.com", 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();
});
于 2012-10-19T07:37:14.790 に答える