2012-04-09 13 views
2

ブラウザの起動時に実行するバンドルされた実行可能ファイルでFirefox拡張機能を開発します。Firefoxの拡張子で相対パスを使用する

実行するには、実行可能ファイルを指すnsIFileまたはnsILocalFileインスタンスを取得する必要があります。 私はそれがディレクトリサービスを使用して取得する方法を一つの解決策を知っている:

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の拡張機能に付属している実行可能ファイルを実行する方法はありますか?

ありがとうございました。

答えて

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; 
    ... 
}); 
2

再起動のないアドオンのstartup機能(bootstrap.jsファイル内)は、アドオンがインストールされているパスを最初のパラメータとして受け取ります。 .jarファイル内にファイルがある場合は、そのファイルを読み取るために様々な技を試すことができます。例としてhttps://github.com/protz/GMail-Conversation-View/blob/master/bootstrap.js#L55を参照してください。

再起動しない場合、私は多くのアイデアは持っていないと告白する必要があります:)。

関連する問題