我尝试了一个使用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肯定会是一个文件系统,但我尽量避免使用该方法
答案 0 :(得分:1)
这可能是因为requestQuota
和requestFileSystem
函数是异步的。换句话说,在设置 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)
});
}