2013-01-25 5 views
9

Ich habe eine web-basierte Android-App, die WebSQL zum Speichern verwendet. Aus irgendeinem Grund verursacht das Aufrufen von openDatabase an einem bestimmten Punkt (als Reaktion auf einen Tastendruck) einen DOMException mit der Nachricht "SECURITY_ERR: DOM Exception 18".SECURITY_ERR: DOM Ausnahme 18 auf openDatabase

Beachten Sie, dass ich PhoneGap nicht verwende.

Die Hauptfrage, die ich hier stelle, ist: Was sind die möglichen Ursachen für eine DOMException 18 auf openDatabase?

Weitere Details: Diese Ausnahme tritt nur auf, wenn die Datenbank noch nicht existiert. Wenn es bereits existiert, funktioniert es wie erwartet. Die Funktion, die den Anruf openDatabase macht, wird in einem anderen Teil der App verwendet und funktioniert gut.

Was ich bisher versucht haben:

  • die Größe der Datenbank Reduzierung - sollte kein Problem sein, da sie von einem anderen Teil der App erstellt wird ist.
  • Ich habe die Berechtigungen für externe Speicher überprüft - wieder sollte kein Problem sein.
  • Ich habe irgendwo gelesen, dass das eingesteckte USB-Kabel dieses Problem verursachen könnte - nicht, was es in diesem Fall verursacht.

EDIT: Dies ist, was der Befehl wie folgt aussieht:

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

ist das Problem gelöst ... Ich bin mit dem gleichen Problem konfrontiert ... – Aravin

+1

Nie herausgefunden, was die Ursache war. Am Ende fand ich die WebSQL-Stabilität auf verschiedenen Android-Geräten/-Versionen für meine Bedürfnisse zu inkonsistent, so dass ich am Ende eine native Oberfläche schrieb, die sich als viel besser herausstellte. Obwohl ich auf diese Frage keine Antwort mehr brauche, wäre ich immer noch daran interessiert, sie zu hören, aus Neugier. – Goldsmith

+0

ich löste dieses Problem..genanntermaßen offene Datenbank in der Gerät-bereit-Funktion .... – Aravin

Antwort

1

zum the spec spec Laut, es verursachen, indem sie nur zwei

  • Der User-Agent erhöhen kann eine SECURITY_ERR-Ausnahme, anstatt ein Database-Objekt zurückzugeben, wenn die Anforderung eine Richtlinienentscheidung verletzt (z. B. wenn der Benutzeragent conf ist) nicht zulassen, dass die Seite Datenbanken öffnet).

  • Wenn Herkunft kein Schema/Host/Port-Tupel ist, werfen dann eine SECURITY_ERR Ausnahme

+0

Beide Anrufe haben den gleichen Ursprung, und der Benutzeragent wird vor dem Laden der Seite konfiguriert. – Goldsmith

+0

Es sollte etwas sein.Ich kann nur herausfinden, wenn Sie Ihren Code zeigen –

2

Ich fand, dass es mit der erlaubten Größe der Datenbank zu tun hat. Wenn Sie versuchen, eine Datenbank zu öffnen, die größer als 50 MB auf iOS ist, erhalten Sie diesen Fehler.

+0

Während ich nicht überrascht wäre, wenn opendatabase den genau gleichen Fehler verursacht, wenn Sie über die Größenbeschränkung gehen, ist dies hier nicht der Fall. Wie ich schon sagte, es wurde erfolgreich in einem anderen Teil der App erstellt. Außerdem habe ich das Limit auf 5 MB festgelegt. – Goldsmith