1

我尝试了一个使用 HTML5 FileSystem 的简单项目,因此我可以在客户端存储数据。

onclick我的第一次尝试是成功的,因为我在开始时使用 JavaScript 启动所有内容,并在oronkeypress事件中操作文件(读取文件并将其附加到 textarea 或 P;并写入/修改文件) 。

但是,当我在事件之外同时执行此操作时,文件系统的变量为空/未定义,我无法继续该过程。

这是运行良好的代码:

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,这意味着fs变量是 FileSystem。

但是当我这样做时:

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)返回的空值。有什么解决方案可以解决这个问题吗?任何解释都会对此有用。我最后的手段是添加一个按钮,这样点击后fs肯定是一个文件系统,但我尽量避免使用这种方法。

4

1 回答 1

1

这可能是因为requestQuotarequestFileSystem函数是异步的。换句话说,在设置 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 回答