我正在尝试在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.js和webfs.js),甚至尝试编写自己的包装器并且没有运气实现文件api(每个包装器产生相同的错误)。
我尝试使用app缓存,但由于应用程序的性质,我遇到了内存限制(缺少空间)。此外,这只能在Chrome中运行。
如何让我的fs
对象初始化为正确的“文件系统”对象,以便我可以离线读/写文件?
答案 0 :(得分:2)
错误是因为fs
是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);
// ...
}