ローカルの 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" を宣言すると、サイレント エラーが発生します。