0

我正在“尝试”创建一个 Safari 扩展程序,将链接添加到本地 sqlite 数据库。

在 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”出现在控制台中,并停止运行其余代码。

有没有人有任何想法?一个多星期以来,我一直试图让它工作,但我已经无能为力了。

在此先感谢您的任何建议 ;-)

注意在尝试创建表之前声明“txn”也会导致静默失败。

4

0 回答 0