我正在使用Cordova 2.1.0开发ios应用程序。
即使“deviceready”事件已被触发,似乎fileSystem也不可用。
window.onload = function (){
document.addEventListener("deviceready", getSettings(), false);
}
function getSettings(){
fileSys('settings.txt', 'getContent', null);
}
function fileSys(fileName, action, data){
alert('hello'); // fires
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
alert('hello'); // does not fire
//rest of the script breaks
}
请求文件系统后脚本中断。但是,如果我在setTimeout中将调用包装到fileSys(),它就可以工作。例如:
window.onload = function (){
document.addEventListener("deviceready", getSettings(), false);
}
function getSettings(){
setTimeout(function(){
fileSys('settings.txt', 'getContent', null);
}, 500);
}
function fileSys(fileName, action, data){
alert('hello'); // fires
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
alert('hello'); // fires
//script runs fine
}
对此有何解决方案?
答案 0 :(得分:4)
deviceready的设置应为
document.addEventListener("deviceready", getSettings, false);
“getSettings()”表示现在运行该函数并将结果传递给addEventListener。
“getSettings”表示将函数引用传递给addEventListener,以便在事件触发时运行它。
答案 1 :(得分:2)
你的fileSys函数是否应以“function”开头?
function fileSys(fileName, action, data){}
答案 2 :(得分:0)
我不得不将requestFileSystem函数放在setTimeout(...,0)中,但原因不同。
我在类构造函数中运行requestFileSystem,并且要使“success”函数中的回调调用的代码工作,我现在应该已经完成了构造函数。
我的构造函数只包含requestFileSystem函数,并且以某种方式没有setTimeout它完成了它的“成功”函数。
(仅适用于Android - 我在iOS上没有注意到这样的经验)