Ошибка JavaScript только в Chrome, отлично работает в Safari?

У меня есть следующий код для настройки базы данных и ее таблиц на 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 ответ

Что ж, трудно сказать наверняка, не зная HTML, но я предполагаю, что chrome не имеет метода openDataBase, назначенного его объекту window, и который переходит к некоторому плохому JQuery:

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

"add_note" не имеет смысла. Если add_note является классом, он должен быть '.add_note' или же '#add_note' если идентификатор.

Кроме того, поскольку это JQuery, у него, вероятно, не будет метода innerHTML. Самое быстрое исправление, если предположить, что идентификатор будет:

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

Но это может обанкротиться, если это элемент формы, такой как текстовый ввод.

Другие вопросы по тегам