3

コンテンツスクリプトのFireFoxアドオンSDKでHtml5ファイルAPIにアクセスする方法はありますか?

これは、ユーザーが追加した単語とその意味を保存するために必要です。データが大きくなる可能性があるため、ローカルストレージはオプションではありません。

 window.requestFileSystem3 = window.requestFileSystem || window.webkitRequestFileSystem;

TypeErrorというエラーが表示されます:window.requestFileSystem3は関数ではありません

コンテンツスクリプトでファイルAPIにアクセスできるGoogleChrome拡張機能からこのコードを移植しているため、これを求めています。

追加の質問

1)HTML5ファイルAPIが許可されていない場合、ファイルモジュールを使用する必要がありますか?

2)ファイルシステムへのサンドボックスアクセスのみにアクセスするHtml5ファイルAPIとは対照的に、ファイルモジュールはファイルシステム上の任意のファイルへのアクセスを許可しますか?

3)ファイルモジュールを使用する必要があると仮定すると、ファイルを保存するのに最適な場所(ユーザープロファイルディレクトリや拡張ディレクトリなど)と、このパスをコードで取得する方法を教えてください。

この質問の中にたくさんのサブ質問があることをお詫びします。Googleはこのトピックに関してあまり役に立ちませんでした。

サンプルコードは非常に役立ちます。

4

1 に答える 1

6

FirefoxはまだFileAPIを介したファイルの書き込みをサポートしておらず、これが追加される場合でも、拡張機能ではなくWebページにのみアクセスできる可能性があります。言い換えれば、はい、どうしてもファイルに書き込む必要がある場合は、低レベルのAPIを使用する必要があります。データをユーザープロファイルディレクトリに保存する必要があります(拡張ディレクトリはありません。通常、拡張機能は単一のパックファイルとしてインストールされます)。このようなものは、ファイルを書き込むために機能するはずです:

var file = require("sdk/io/file");
var profilePath = require("sdk/system").pathFor("ProfD");
var filePath = file.join(profilePath, "foo.txt");
var writer = file.open(filePath, "w");
writer.writeAsync("foo!", function(error)
{
  if (error)
    console.log("Error: " + error);
  else
    console.log("Success!");
});

参考までに:sdk/io/filesdk/system

TextReader.read()またはを使用file.read()してファイルを読み取ることができます。残念ながら、アドオンSDKは非同期ファイル読み取りをサポートしていないようであるため、読み取りによってFirefoxUIがブロックされます。唯一の代替手段は、次のようなchrome権限を介してNetUtilFileUtilsをインポートすることです。

var {components, Cu} = require("chrome");
var {NetUtil} = Cu.import("resource://gre/modules/NetUtil.jsm", null);
var {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm", null);
NetUtil.asyncFetch(new FileUtils.File(filePath), function(stream, result)
{
  if (components.isSuccessCode(result))
  {
    var data = NetUtil.readInputStreamToString(stream, stream.available());
    console.log("Success: " + data);
  }
  else
    console.log("Error: " + result);
});
于 2012-09-18T13:48:04.627 に答える