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...');
};
(追記: 私のコードに対する批判も歓迎します...)