2

Google Chrome での HTML5 ファイル システム API の使用に関するこの記事を読み、パッケージ化された Web アプリケーションに組み込むことにしました。

メモと提供されたコードをガイドとして使用して、かなり長いスクリプトを次のようにまとめました。

var FSA = FSA || {};
var fsys, root, fileReader, dropReader, dropContainer, btn = [];
window.addEventListener("load", function () {
    window.requestFileSystem(PERSISTENT, 5242880 /* ~5MB */, function(fs) {
        fsys = fs;
        root = fsys.root;
    }, FSA.error);
});
function createFile(path) { 
    root.getFile(path, {create:true, exclusive:true}, function() {
        console.log(path+ " file created"); 
    }, FSA.error); 
};
function saveFile(name, data, mimetype) {
    var e = this || null;
    name = name || e.target.name;
    data = data || e.target.result;
    mimetype = mimetype || e.target.type;
    root.getFile(name, {create: true}, function(fileEntry) {
        fileEntry.createWriter(function(writer) {
            writer.onwrite = function(e) {
                console.log(name + ' written successfully to filesystem.');
                FSA.getFile(name);
            };
            writer.onerror = function(e) {
                console.log('Write failed: ' + e);
            };
            var bb = new BlobBuilder();
            bb.append(data);
            writer.write(bb.getBlob(mimetype));
        });
    }, FSA.error);
};
function openFile(file, fileTarget) {
    root.getFile(file.name, null, function(entry) {
        entry.file(function(file) {
                reader = new FileReader();
                reader.filename = file.name;
                reader.onload = function(e) {
                    fileTarget = e.target.result;
                };
                reader.readAsText(file);
        }, FSA.error);
    }, FSA.error);
};

そして、ある程度、それは機能しているようです。createFile 関数を使用してファイルを作成し、saveFile 関数を使用してファイルを保存できます。ただし、openFile 関数を使用できないようで、3 つの関数すべてが JavaScript コンソールで次のエラーを返します。

Uncaught TypeError: Cannot call method 'getFile' of undefined

問題は変数に関係していると思いますがroot、間違っている可能性があります。

これは新しい API であり、ドラフト仕様であるため、この問題の解決に役立つドキュメントはほとんどありません。

誰かが問題を指摘できますか? もしそうなら、解決策に貢献できますか?

ご協力いただきありがとうございます。

編集:「10.0.639.0 カナリア ビルド」を使用しているため、ブラウザで API を拡張機能で使用できるようにする必要があると思います。

4

1 に答える 1

2

今のところ、FileSystem APIgetFileは Chrome 8 の拡張機能では動作しません。getFile で新しいファイルを作成する場合は、外部でホストされている Web ページでコードを実行するために実行する必要があります。

拡張機能内の Chrome 9 以降でサポートされます。詳細については、HTML5 Chromium メーリング リストの投稿を参照してください。

Google Chrome 10.0.634.0 Dev Channel を実行しています。そして、インスペクター内で:

window.requestFileSystem(PERSISTENT, 5242880 /* ~5MB */, function(fs) {
  root = fs.root;
})
root.getFile

戻り値:

function getFile() { [native code] }
于 2011-01-17T05:08:43.000 に答える