0

WebSQL と IndexedDB の両方を使用して Web アプリを開発しています。IndexedDB は、それをサポートするブラウザーで適切に動作し、私の WebSQL 実装はほとんどのブラウザーで動作しますが、Android では javascript の実行が内部で停止しているようdb.transactionです。

これが私のコードです。「トランザクションを開始しています...」の後にコンソールログを受信しません(さらにJSが実行されていないようです)。

window.store.getFile = function( filename, callback ) {
    var db = window.store.websql.db;
    console.log('Initiating transaction...');
    db.transaction(function (tx) {
        var filename2 = filename;
        var query = 'SELECT * FROM file WHERE filename = "'+filename+'"';
        console.log('Executing query:'+query);
        tx.executeSql(query, [], function(t, r) {
            if ( r.rows.length > 0 ) {
                var len = r.rows.length, i;
                for (i = 0; i < len; i++) {
                    var filename = r.rows.item(i).filename;
                    var data = r.rows.item(i).data;
                    if ( callback ) callback( true, filename2, data );
                    break; // Break here as only one result should be returned
                }
            } else {
                if ( callback ) callback( false, filename2, null );
            }
        }, function(t, e) {
            console.log(e);
            if ( callback ) callback( false, filename2, null );
        });
    }, function(e) {
        console.log('Database transaction error: '+e);
        if ( callback ) callback( false, filename, null );
    }, function() {
        console.log('Transaction success');
    });
    console.log('Transaction initiated...');
};

(追記: 私のコードに対する批判も歓迎します...)

4

1 に答える 1

3

追跡しているエラーは、おそらく db レベルのエラー ハンドラ (openDatabase で渡される) で発生します。一部のAndroid携帯は、そのエラーハンドラに対してnullまたは未定義を受け入れないだけで、症状はあなたが説明したものです。エラーも成功も何もありません...

また、エラーが自動的に発生するのを防ぐために、成功ブロックを try/catch にする必要があります。

また、成功ハンドラーへの戻り値 (false/true) は、エラーがスローされたときに何が起こるかを決定することに注意してください (ロールバックまたはロールバックなしのエラーのみ)。

于 2013-04-08T07:01:30.477 に答える