DOM File API を chrome code で使いたければ、 制限なしにそうすることができます。 実際に、 おまけの機能を一つ得ます: ユーザーのコンピューターのファイルへのパスを指定して File
オブジェクトを作ることができます。 これは、特権のあるコードでのみ動きます。 そのため、ウエッブコンテンツでは動きません。 これは、ウエッブコンテンツが自由に彼らのディスクにアクセスすることに関係した危険 から、ユーザーを保護します。 もし、特権無しのコード(ウエッブコンテンツのような)から File
コンストラクタにパスを通せば、 例外が発生します。
スコープの可用性
JSM スコープでは、Fileは、特別なことを何一つ必要とせずに、有効です。
Bootstrap スコープでは、このようにインポートすることが必要です:
Cu.importGlobalProperties( [ "File" ] )
パスを直接書き込んでのファイルの利用
パスによるファイルへの参照、単純に直接文字列として書き込むことができます:
var file = File("path/to/some/file");
クロスプラットホームでの注釈: とはいえ、 直接書き込まれたパスは、プラットホームに依存したセパレータ (これ "/") に起因する、クロスプラットホームでの問題が発生します。 XUL/Mozilla プラットホームでは、Java と同等にひどくない。File.pathSeparator
(システムに依存する、パスセパレータ文字)、これは、すべてのパスセパレータを定義することを避ける、良い方法です。
それよりも、次の章で説明する、nsIFile::append() メソッドを使え。
特殊なディレクトリにあるファイルの利用
あなたは、ファイルを利用するためのパスを、獲得し作成するために、ディレクトリサービスを使うことができます。 例えば、あなたのアドオンが、ユーザープロファイル内のファイルを利用する必要があれば、このようにできます:
var dsFile = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("ProfD", Components.interfaces.nsIFile); dsFile.append("myfilename.txt"); var file = File(dsFile.path);
この、プロファイルディレクトリへのディレクトリサービスの使用 (ロケーションキー "ProfD" を用いる、 詳細は下記を参照)。そして、 作業をしたいファイルの名前をそえて nsIFile.append()
を呼び出す。 最後に、 File
のコンストラクタへ通す文字列を返すnsIFile.path()
渡し、File
の実体を作ります。
さらにもっと簡単にすることができます!実は、 nsIFile
オブジェクト自身を直接 File
のコンストラクタに渡すことができます。 次のコードにあるように:
var dsFile = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("ProfD", Components.interfaces.nsIFile); dsFile.append("myfilename.txt"); var file = File(dsFile);
"ProfD" キーなどのような、他のキーも用意されています。 known locations を確認してください。
注釈
Gecko 8.0 (Firefox 8.0 / Thunderbird 8.0 / SeaMonkey 2.5)から始まりました。コンポーネントコードの中でもこれは行えます。