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 fileSys(fileName, action, data){}
于 2012-11-08T23:39:04.270 に答える
0

setTimeout(..., 0) にも requestFileSystem 関数を入れなければならなかったのですが、理由が違いました。

クラスコンストラクターでrequestFileSystemを実行し、「成功」関数のコールバックによって呼び出されるコードを作成するには、現時点でコンストラクターが既に終了している必要があります。

私のコンストラクターはrequestFileSystem関数のみで構成されており、setTimeoutがゼロではないため、「成功」関数の後に終了しました。

(Android のみ - iOS ではそのような期限切れに気づきませんでした)

于 2013-03-29T06:27:18.253 に答える