Cordova / phonegap文件系统尚未准备好“deviceready”

时间:2012-11-08 13:26:59

标签: cordova

我正在使用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
}

对此有何解决方案?

3 个答案:

答案 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上没有注意到这样的经验)