仅在Chrome中出现JavaScript错误,在Safari中运行良好?

时间:2012-04-30 22:52:53

标签: javascript google-chrome web-applications iphone-web-app

当用户启动独立的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一起正常使用,我们将不胜感激。

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

1 个答案:

答案 0 :(得分:0)

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

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

'add_note'毫无意义。如果add_note是一个类,那么如果是ID,它应该是'.add_note''#add_note'

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

,最快的修复
$('#add_note')[0].innerHTML = "Browser does not support local storage."

但如果它是像文本输入一样的表单元素,那么这可能会破灭。