2012-11-05 48 views
1

我嘗試使用HTML5文件系統, 這樣我就可以存儲在客戶端的數據,HTML5文件系統初始化

我的第一次試驗是成功的,因爲我在一開始使用JavaScript, 啓動一切簡單的項目,在onclick或onkeypress事件中操作文件(讀取文件並將其附加到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); 
} 

警報(FS)導致DOM文件系統,這意味着,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); 

警報(FS)返回null, 有沒有可以做這個的任何解決方案?任何的解釋是有用的這一點, 我不得已將添加一個按鈕,使後點擊FS肯定會是一個文件系統,但我會盡量避免這種方法

回答

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) 
    }); 
} 
+0

這是有意義的,爲什麼fs是空,是有辦法同步做到這一點?因爲把我所有的代碼放在回調裏面並不是我想要做的事 –

+0

我不知道它的同步功能。你可以看看'promises' - 你必須得到一個外部庫。或者你可以做一些醜陋的事情,比如'If fs == null然後再次嘗試10ms'(僞代碼) – paulslater19

+0

或者甚至在你知道它被執行之前就不啓動你的代碼(例如等待1s) – paulslater19