2013-04-17 3 views
1

У меня есть два приложения, которые оба используют базу данных SQL в webview.SECURITY_ERR: DOM Exception 18 При открытии базы данных в WebView

Один из них очень хорошо работает на моем устройстве, а другой вызывает эту ошибку при попытке открыть базу данных.

Uncaught Ошибка: SECURITY_ERR: DOM Exception 18

Все аналогично как в проекте, я пробовал многие вещи, но не нашли причину.

Я начал проект с нуля, он отлично работает.

+0

http://stackoverflow.com/questions/8390985/android-4-0-1-breaks-webview-html-5-local-storage – konmik

ответ

1

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

У меня не было создать базу данных так:

db = window.openDatabase("myDatabase", "1.0", "my.Database", 1024); 

на Android 4.0.3 не было никаких проблем, проблема была на Android 4.1 появляется (SECURITY_ERR: DOM Exception 18)

Затем я изменил свое имя базы данных, удаляя "помешан" и странные символы, чтобы быть похожим, что:

db = window.openDatabase("myDatabase", "1.0", "myDatabase", 1024); 

Тогда моя проблема была решена :)

Я прибегая к помощи для решения этой проблемы, то я уже решенной сейчас: D

Надежда, что это было решение вашей проблемы (как вопрос, задаваемый 1 месяц назад)

3

Я решил «SECURITY_ERR: DOM Exception 18», переопределив метод onExceededDatabaseQuota.

webView = (WebView) findViewById(R.id.webView1); 
webView.setWebChromeClient(new WebChromeClient() { 
    @Override 
    public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize, 
     long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) { 
     quotaUpdater.updateQuota(estimatedSize * 2); 
    } 
}); 
+0

Если вы используете 'loadUrl (" file: // ... ")', то это правильное решение для 'openDatabase', работающего на Android 4.2. Бесконечно благодарен! – nlawson

4

Это заняло у меня целый день, чтобы выяснить, так что я хотел бы дать полную документацию о том, как решить эту проблему на Android 4.2 и 4.3.

Вы: : Использовать веб-SQL от file:// URL в WebView. Кордове удалось это сделать. Есть только три вещи вы должны сделать:

1) Позвоните setDatabaseEnabled() (Дух):

webView.getSettings().setDatabaseEnabled(true); 

2) Установить путь к файлу базы данных. Да, это осуждается в Android 4.4, но это требуется, если вы хотите, чтобы избежать DOM Exception 18 в предварительном KitKat:

String databasePath = getContext().getApplicationContext().getDir(
    "database", Context.MODE_PRIVATE).getPath(); 
webView.getSettings().setDatabasePath(databasePath); 

3) Установите onExceededDatabaseQuota обработчик. Да, он устарел в Android 4.4, бла-бла-бла.

webView.setWebChromeClient(new WebChromeClient() { 

     @Override 
     public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize, 
              long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) { 
     quotaUpdater.updateQuota(estimatedSize * 2); 
     } 
    }); 

Если вы пропустите любой один из этих 3 шагов, то вы получите сообщение об ошибке DOM Exception 18 и Web SQL не будет работать. Вас предупредили.

+0

Решил мою проблему. Я искал код onExceededDatabaseQuota; теперь, когда я добавил, что мои проблемы, похоже, ушли. Благодарю. –

+0

Это абсолютно ответ для <4.3 Android-устройств. У меня есть приложение Sencha Touch, завернутое в собственное приложение для Android и работающее в веб-просмотре. Я выпустил обновление, которое реализует WebSql, и ряд моих пользователей со старыми устройствами получил не более чем пустой белый экран. После добавления onExceedDatabaseQuota все, казалось, работало правильно. Спасибо @nlawson! – i2097i

Смежные вопросы