Ошибка неверного состояния, исключение DOM 11 в мобильном браузере Safari, вызывающее openDatabase - PullRequest
3 голосов
/ 08 июня 2011

У меня есть веб-приложение, которое вызывает openDatabase () при инициализации.Это прекрасно работает в настольных браузерах Chrome и Safari;однако, когда я пытаюсь открыть приложение в Mobile Safari на iOS 4.3.3, я получаю исключение при загрузке первой страницы:

"Ошибка: INVALID_STATE_ERROR: DOM Exception 11"

Этопроисходит сбой в openDatabase () внутри простой функции:

       try {
            if( !window.openDatabase) {
                console.log('SQLite is not supported by this browser');
            }
            else {
                db = openDatabase('MyMobileDb', '1.0', 'MyMobileDb', 65536);
                if (doreset)
                {
                    //my drop and reset DB function
                } else
                {
                    //my init DB function
                }
            }
        }
        catch(e) {
            console.log(e);
        }

База данных не создана, и дальнейшее взаимодействие с приложением невозможно.Другие разработчики, работающие под управлением более ранних версий iOS, не сталкиваются с этой проблемой из-за того же кода.Я также получаю сообщения от нашей команды QA о том, что Android демонстрирует похожее поведение.Android 3.1 работает, а 2.2 и 2.1 - нет.

Что я могу сделать, чтобы это исправить?

Ответы [ 2 ]

6 голосов
/ 26 ноября 2012

Я понимаю, что это не тот случай в вашем вопросе, но на тот случай, если кто-то еще споткнется здесь в поисках ответа, у меня возникла та же ошибка, и это произошло потому, что я передавал значение число дляверсия вместо строки .

2 голосов
/ 24 июня 2011

У меня есть некоторый код WebSQL, работающий в автономном мобильном приложении, которое работает в iOS 4.3.3 и настольном Safari OK.

INVALID_STATE_ERROR: DOM Exception 11 разочаровывающе непрозрачен в том смысле, что может ссылаться на очень много разных вещей, но я подозреваю, что проблема WebKit, на которую вы ссылаетесь, имеет ответ в вашем случае. Во всяком случае, на то, что может помочь ...

FWIW в моем коде Я инициализирую соединение с базой данных через "своего рода" фабрику, и это, кажется, работает нормально, сохраняясь в моем приложении (на самом деле, я использую соединение с базой данных "фабрика" плюс a второй объект-прототип, который инкапсулирует весь мой SQL, немного похоже на Javascript DAO, но для краткости я его опущу).

Я создал суть с примером «фабрики» (это экстраполяция части моего производственного кода, поэтому извиняюсь за любые упущения): http://gist.github.com/1044759

Этот код инициализирует подключение к вашей базе данных и создаст соответствующие таблицы, если они еще не существуют.

Вот пример сценария (возможно, для $(document).ready), который установит соединение с БД:

// Initialise local db
var mydb = new DbConnection().getDb();

Чтобы использовать соединение, вы просто вызываете свой обычный транзакционный Javascript, используя mydb в качестве бита базы данных, т.е.

mydb.transaction(function(transaction){
  transaction.executeSql(...

Надеюсь, это поможет.

...