2

当用户启动独立的 Web 应用程序时,我有以下代码在 iDevice 上设置数据库及其表。如果在带有 Safari 的设备上使用该代码可以正常工作,但如果它在 Chrome 中打开,则会引发以下错误

Uncaught Error: INVALID_STATE_ERR: DOM Exception 11

除了错误之外,它还阻止其他功能工作,同样仅在 Chrome 中。这是代码,包括创建表的函数。我在 Chrome 指示错误的行的代码中添加了注释。

//this sets up the DB name global variable and uses it to open the DB
        var dbName = 'CBNapp',
        db = openDatabase(dbName, '1.0', dbName, 65536);// chrome error = UncaughtError: INVALID_STATE_ERR: DOM Exception 11 (anonymous function) line 43
//            db = openDatabase(dbName, '1.0' /*version*/, dbName, 65536 /*max size*/);
//opens the database when the document is loaded
$(document).ready(openCBNappDB);

function openCBNappDB(){
//this if statement checks to see if device supports offline storage
    if ( !window.openDatabase ) {
        $('add_note').innerHTML = "Browser does not support local storage."
        return;
    }
// create tables in the DB
    function dbTransaction(fn) {
       db.transaction(fn);
    }
    /*create 5 tables*/ //colums in tables are not correct as of apr 25 2012
    dbTransaction(
        function (tx) {
        tx.executeSql('CREATE TABLE CBNapp_Usage (key INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, MemberID TEXT NOT NULL DEFAULT "", NewKnife INTEGER NOT NULL DEFAULT 0, True INTEGER NOT NULL DEFAULT 0, Trivia INTEGER NOT NULL DEFAULT 0, Movies INTEGER NOT NULL DEFAULT 0, Jokes INTEGER NOT NULL DEFAULT 0, Musings INTEGER NOT NULL DEFAULT 0, Stories INTEGER NOT NULL DEFAULT 0);');
    tx.executeSql('CREATE TABLE CBNapp_Members (key INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, MemberID TEXT NOT NULL DEFAULT "", CBNname TEXT NOT NULL DEFAULT "", Community TEXT NOT NULL DEFAULT "", BirthDay TEXT NOT NULL DEFAULT "", BirthMonth TEXT NOT NULL DEFAULT "", Gender TEXT NOT NULL DEFAULT "Male", iOS TEXT NOT NULL DEFAULT "", Device TEXT NOT NULL DEFAULT "");');
    tx.executeSql('CREATE TABLE CBNapp_Scores (key INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, MemberID TEXT NOT NULL DEFAULT "", GameName TEXT NOT NULL DEFAULT "", TimesPlayed INTEGER NOT NULL DEFAULT 0, HiScore INTEGER NOT NULL DEFAULT 0 );');
    tx.executeSql('CREATE TABLE CBNapp_UserPrefs (key INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, MemberID TEXT NOT NULL DEFAULT "", TextSize INTEGER NOT NULL DEFAULT 14, AutoRetrieve INTEGER NOT NULL DEFAULT 0 );');
    tx.executeSql('CREATE TABLE CBNapp_Errors (key INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, MemberID TEXT NOT NULL DEFAULT "", code INTEGER NOT NULL, message TEXT NOT NULL );');
    }
);
}

如果有人可以建议一个特定的解决方案来让它与 Chrome 和 Safari 一起正常工作,我们将不胜感激。

我确信我在脚本中也犯了许多其他错误。如果有人愿意花时间向我展示我应该如何改进它,我将非常感谢任何想法。我对此很陌生,请提出具体建议。

4

1 回答 1

0

好吧,在不知道 HTML 的情况下很难肯定地说,但我猜 chrome 没有分配给它的 window 对象的 openDataBase 方法,并且分支到一些错误的 JQuery:

$('add_note').innerHTML = "Browser does not support local storage."

'add_note' 没有意义。'.add_note'如果 add_note 是一个类,它应该是'#add_note'一个 ID。

此外,由于它是 JQuery,它可能不会有 innerHTML 方法。假设 ID 的最快修复可能是:

$('#add_note')[0].innerHTML = "Browser does not support local storage."

但如果它是像文本输入这样的表单元素,那可能会失败。

于 2012-04-30T23:28:10.637 回答