未捕获的TypeError:无法读取未定义的属性“root”

时间:2013-08-14 18:41:33

标签: javascript html5 fileapi

我正在尝试在html5网络应用中为离线功能实现文件api存储,而且我遇到了一些问题。

我在一个包含的JS文件中有以下代码(我正在创建一个用于处理文件api的库):

window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(window.TEMPORARY, 5 * 1024 * 1024, initFS, errorHandler);

function initFS(fs) {
    alert("Welcome to Filesystem! It's showtime :)"); // Just to check if everything is OK :)  
    fs.root.getDirectory('files', { create: true }, function(dirEntry) {
        alert('You have just created the ' + dirEntry.name + ' directory.');
    }, errorHandler);
}

在另一个JS文件中(我的大部分工作(业务逻辑)已经完成),我有:

//INITALIZE
function InitalizeStore() {
    initFS();

    //more init's done here
}

我遇到的问题是在initFS函数中,fs.root.getDirectory('files'...引发了错误:Uncaught TypeError: Cannot read property 'root' of undefined

我已经尝试了一些文件api包装器(filer.jswebfs.js),甚至尝试编写自己的包装器并且没有运气实现文件api(每个包装器产生相同的错误)。

我尝试使用app缓存,但由于应用程序的性质,我遇到了内存限制(缺少空间)。此外,这只能在Chrome中运行。

如何让我的fs对象初始化为正确的“文件系统”对象,以便我可以离线读/写文件?

1 个答案:

答案 0 :(得分:2)

错误是因为fsundefinedundefined不能拥有root等属性。

编写

initFS以期望为fs传递值。

function initFS(fs) {
    fs.root.getDirectory(...);
}

但是,它是在没有任何参数的情况下被调用的,因此fs将没有这样的值。

function InitalizeStore() {
    initFS();

    // ...
}

  

如何让我的fs对象初始化为正确的“文件系统”对象,以便我可以离线读/写文件?

您将其用作requestFileSystem()的回调,您已经在其他地方做过了。

window.requestFileSystem(window.TEMPORARY, 5 * 1024 * 1024, initFS, errorHandler);

如果您希望创建等到调用InitializeStore(),请在函数内移动该行:

function InitalizeStore() {
    window.requestFileSystem(window.TEMPORARY, 5 * 1024 * 1024, initFS, errorHandler);

    // ...
}