2013-01-25 11 views
9

Ho un'app Android basata sul Web che utilizza WebSQL per l'archiviazione. Per qualche ragione, chiamare openDatabase a un certo punto (in risposta a un clic del pulsante), provoca un DOMException con il messaggio "SECURITY_ERR: DOM Exception 18".SECURITY_ERR: DOM Exception 18 su openDatabase

Nota che non sto utilizzando PhoneGap.

La domanda principale che sto chiedendo è: Quali sono le possibili cause di DOMException 18 su openDatabase?

Altri dettagli: Questa eccezione si verifica solo se il database non esiste ancora. Se esiste già, funziona come previsto. La funzione che effettua la chiamata openDatabase viene utilizzata in un'altra parte dell'app e funziona perfettamente.

Quello che ho provato finora:

  • La riduzione delle dimensioni del database - non dovrebbe essere un problema dal momento che è stato creato da un'altra parte della app.
  • Ho controllato le autorizzazioni di archiviazione esterne - di nuovo, non dovrebbe essere un problema.
  • Ho letto da qualche parte che il cavo USB da collegare potrebbe causare questo problema, non quello che sta causando in questo caso.

EDIT: Questo è ciò che il comando è simile:

db = openDatabase('my_database', '1.0', 'My database description', 5*1024*1024, function() {}); 
+0

è risolto il problema ... sto affrontando lo stesso problema ... – Aravin

+1

Non ho mai scoperto quale fosse la causa. Alla fine, ho trovato la stabilità di WebSQL essere troppo incoerente su diversi dispositivi Android/versioni per le mie esigenze, quindi ho finito per scrivere un'interfaccia nativa che si è rivelata di gran lunga migliore. Anche se non ho più bisogno di una risposta a questa domanda, sarei comunque interessato a sentirne uno, per curiosità. – Goldsmith

+0

ho risolto questo problema .. chiamato database aperto all'interno della funzione pronta per il dispositivo .... – Aravin

risposta

1

Secondo le specifiche the spec, è causa soltanto da due

  • il programma utente può aumentare un'eccezione SECURITY_ERR invece di restituire un oggetto Database se la richiesta viola una decisione di policy (ad esempio se l'user agent è conf configurato per non consentire alla pagina di aprire database).

  • Se origine non è uno schema di tupla/host/port, quindi un'eccezione SECURITY_ERR

+0

Entrambe le chiamate hanno la stessa origine e l'agente utente è configurato prima che la pagina venga caricata. – Goldsmith

+0

Ci dovrebbe essere qualcosa.Riesco a capire solo se mostri il tuo codice –

2

ho scoperto che ha a che fare con la dimensione consentita del database. Se si tenta di aprire un db che è più grande di 50 MB su iOS, si ottiene questo errore.

+0

Mentre non sarei sorpreso se opendatabase causasse lo stesso errore se superi il limite di dimensioni, questo non è il caso qui. Come ho detto, è stato creato con successo in un'altra parte dell'app. Inoltre, ho impostato il limite a 5 MB. – Goldsmith