0

ローカルの sqlite データベースにリンクを追加する Safari 拡張機能を作成しようとしています。

global.html ファイルでは、データベースを作成できますが、存在しない変数を参照しない限りテーブルを作成できず、スクリプトの残りの部分が失敗します。

// Global Variable to hold my database
var my_DB;

// Make A Database
init_DB();

// Make A Table
createTable(my_DB);

// Rest of the code
alert("Database and Table have been created!");

// Initialise the Database
function init_DB() {    
    try {
        // Check for Database Support
        if (!window.openDatabase) {
            alert("Database functionality is NOT Supported!");
        } else {
            // Setup the database
            var shortName = "imp_DB";
            var version = '1.0';
            var displayName = "My Important Database";
            var maxSize = 65536; // in bytes
            var theDB = openDatabase(shortName, version, displayName, maxSize);
        }
    } catch(e) {
        // Error Handling
        if (e == "INVALID_STATE_ERR") {
            // We have a version number mismatch
            alert("Invalid database version");
        } else {
            // Unknown error
            alert("Unknown error: " + e);
        }
        return;
    }
    // Assign the database to the global variable
    my_DB = theDB;
}


// Create The Table
function createTable(thisDB) {
    thisDB.transaction(function(txn) {
        txn.executeSql('CREATE TABLE IF NOT EXISTS people (id unique, name, age)');
    });
    // The following line is the problem
    someVar = txn;
}

init_DB() の呼び出しは正常に機能し、データベースが作成されます。ただし、createTable(my_DB) の呼び出しは、サイレントに失敗し (エラーや警告なし)、「txn」を参照しない限り、残りのコードは完了します。

したがって、「SomeVar = txn;」を追加します。行はテーブルを作成することを許可しますが、残念ながら、「ReferenceError: 変数が見つかりません: txn」がコンソールに表示され、残りのコードの実行が停止します。

誰にもアイデアはありますか?私はこれを 1 週間以上機能させようとしてきましたが、もう限界です。

提案をお寄せいただきありがとうございます;-)

注意: テーブルを作成する前に "txn" を宣言すると、サイレント エラーが発生します。

4

0 に答える 0