HTML5文件系统初始化

时间:2012-11-05 14:00:56

标签: html5 javascript-events javascript html5-filesystem

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

我的第一次试用是成功的,因为我在一开始就用JavaScript启动了所有内容, 并在onclick或onkeypress事件中操作文件(读取文件并将其附加到textarea或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);
}

警报(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);

警报(fs)返回null, 有没有可以做到的解决方案?任何解释对此都有用, 我的最后一招是添加一个按钮,以便在点击后fs肯定会是一个文件系统,但我尽量避免使用该方法

1 个答案:

答案 0 :(得分: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)
    });  
 }