1

クライアント側にデータを保存できるように、HTML5 FileSystem を使用した簡単なプロジェクトを試してみました。

私の最初の試行は成功しました。最初は JavaScript ですべてを開始し、onclickoronkeypressイベントでファイルを操作 (ファイルを読み取ってテキストエリアまたは P に追加し、ファイルを書き込み/変更) するためです。

しかし、イベント外で同時に行うと、ファイルシステムの変数がnull/undefinedになり、処理を続行できません。

正常に動作しているコードは次のとおりです。

function initFS() {
        window.webkitStorageInfo.requestQuota(PERSISTENT,5*1024*1024,
        function(grantedBytes) {
            window.requestFileSystem(window.TEMPORARY, grantedBytes, function (filesystem)
            {
                fs = filesystem;
            }, errorHandler);
        });
}
document.body.onclick=function()
{
     alert(fs);
     fs.root.getFile('log.txt', {create: true, exclusive: true}, function(fileEntry) {
    }, errorHandler);
}

alert(fs)結果は DOM FileSystem となり、これは変数が FileSystem であることを意味しますfs

しかし、私がこれを行うとき:

function initFS()
{
       window.webkitStorageInfo.requestQuota(PERSISTENT,5*1024*1024,function(grantedBytes){
    window.requestFileSystem(window.TEMPORARY, grantedBytes, function(filesystem) {
        fs = filesystem;
        }, errorHandler);
    })
        
}


if (window.requestFileSystem) {
    initFS();  
}
alert(fs);

返されたalert(fs)null。これに対してできる解決策はありますか?これには、どんな説明でも役立ちます。私の最後の手段は、ボタンを追加して、クリック後にfs間違いなくファイルシステムになるようにすることですが、私はその方法を避けようとしています。

4

1 に答える 1

1

これはおそらくrequestQuotaandrequestFileSystem関数が非同期であるためです。つまり、fs が設定されるalert()に実行されます。

requestFileSystemそれで..すべてのコードをコールバックに入れることができますか? あなたが何を達成しようとしているのかわからない

たとえば、次のことができます。

function initFS(callback)
{
   window.webkitStorageInfo.requestQuota(PERSISTENT,5*1024*1024,function(grantedBytes){
      window.requestFileSystem(window.TEMPORARY, grantedBytes, function(filesystem) {
          callback(filesystem)
      }, errorHandler);
   })

}


 if (window.requestFileSystem) {
    initFS(function (fs) {
        alert(fs)
    });  
 }
于 2012-11-05T14:03:46.320 に答える