1

我正在使用 Cordova 2.1.0 开发一个 ios 应用程序。

即使“deviceready”事件已触发,文件系统似乎也不可用。

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
}

请求文件系统后脚本中断。但是,如果我将对 fileSys() 的调用包装在 setTimeout 中,它就可以工作。例子:

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
}

有什么解决办法吗?

4

3 回答 3

4

deviceready 的设置应该是

document.addEventListener("deviceready", getSettings, false);

“getSettings()”表示现在运行函数并将结果传递给 addEventListener。

“getSettings”表示将函数引用传递给 addEventListener,以便在事件触发时运行它。

于 2012-11-16T07:12:28.317 回答
2

您的 fileSys 函数是否应该以“function”开头?

function fileSys(fileName, action, data){}
于 2012-11-08T23:39:04.270 回答
0

我也必须将 requestFileSystem 函数放入 setTimeout(..., 0) ,但原因不同。

我在类构造函数中运行 requestFileSystem 并使“成功”函数中的回调调用的代码工作我应该让构造函数现在已经完成。

我的构造函数只包含 requestFileSystem 函数,并且在它的“成功”函数之后以某种方式没有零 setTimeout 它完成。

(仅适用于 Android - 我在 iOS 上没有注意到这种体验)

于 2013-03-29T06:27:18.253 回答