0

我正在尝试在 html5 Web 应用程序中为离线功能实现文件 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 时没有运气(每个包装器都产生相同的错误)。

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

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

4

1 回答 1

2

错误是因为fsis undefined。并且undefined不能有像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);

    // ...
}
于 2013-08-14T18:55:27.513 回答