Error de estado no válido, exception DOM 11 en Mobile Safari llamando a openDatabase

Tengo una aplicación web que llama openDatabase () en init. Esto funciona bien en los browseres de escritorio Chrome y Safari; sin embargo, cuando bash abrir la aplicación en Mobile Safari en iOS 4.3.3, obtengo una exception en la carga de la primera página:

"Error: INVALID_STATE_ERROR: DOM Exception 11"

Esto falla en openDatabase () dentro de una function simple:

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); } 

La database no se crea y no es posible ninguna otra interacción con la aplicación. Otros desarrolladores que ejecutan versiones anteriores de iOS no experimentan este problema contra el mismo código. También recibo informes de nuestro equipo de control de calidad de que Android presenta un comportamiento similar. Android 3.1 funciona, mientras que 2.2 y 2.1 no.

¿Qué puedo hacer para arreglar esto?

Tengo un código WebSQL que se ejecuta en una aplicación mobile fuera de línea, que funciona en iOS 4.3.3 y Safari en el escritorio.

INVALID_STATE_ERROR: DOM Exception 11 es frustrantemente opaco, ya que puede referirse a tantas cosas diferentes, pero sospecho que el problema de WebKit al que se vincula tiene la respuesta en su caso. De todos modos, en algo que pueda ayudar …

FWIW en mi código inicializo una connection de database a través de una fábrica "un poco", y esto parece funcionar bien, persistiendo en mi aplicación (de hecho, uso una connection de database "fábrica" más un segundo object prototipo que encapsula todos mis SQL, un poco como un DAO de Javascript, pero dejaré ese bit por razones de brevedad).

He creado una esencia con una 'fábrica' de muestra (es una extrapolación de algunos de mis códigos de producción, así que pido disculpas por cualquier omisión): http://gist.github.com/1044759

Este código inicializará la connection de su database y creará las tablas relevantes si aún no existen.

Aquí hay un ejemplo de script (quizás por $(document).ready ) que configurará la connection de db:

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

Para usar la connection, simplemente llama a su transacción normal Javascript, usando mydb como el bit de database, es decir:

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

Espero que ayude.

Me doy count de que este no es el caso en su pregunta, pero por si acaso alguien tropieza aquí buscando una respuesta, tuve el mismo error y fue porque estaba pasando un valor numérico para la versión en lugar de una cadena .