3

ブラウザーの起動時に実行する実行ファイルがバンドルされた Firefox 拡張機能を開発しています。

プロセスを実行するには、実行可能ファイルを指す nsIFile または nsILocalFile インスタンスを取得する必要があります。ディレクトリサービスを使用して取得する方法を1つ知っています。

var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile);
file.append("extensions");
file.append("<extension id>");
file.append("<relative path>");

ただし、このソリューションには 2 つの欠点があります。

  1. インストールされた拡張機能の代わりに、実際の拡張パスを持つテキストファイルしかない場合、開発モードでは機能しません

  2. パスの「拡張機能」部分がハードコーディングされているため、すべての Firefox 構成で機能するかどうかはわかりません

では、Firefox 拡張機能に付属する実行可能ファイルを実行するためのより良い方法はありますか?

ありがとう。

4

2 に答える 2

3

Firefox プロファイルのディレクトリ構造についてあまりにも多くの仮定をしています - しないでください。Add-on Manager APIを使用すると、拡張機能内のファイルのパスを取得できます。これを使用する必要があります。

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

AddonManager.getAddonByID("<extension id>", function(addon)
{
  var uri = addon.getResourceURI("<relative path>");
  var file = uri.QueryInterface(Components.interfaces.nsIFileURL).file;
  ...
});
于 2012-05-26T08:32:33.120 に答える