2016-01-05 3 views
4

Я получаю InvalidAccessError, когда пытаюсь открыть индексированную базу данных в приложении IOS для кордовы.Можно ли использовать indexedDB в приложении IOS кордовы?

Платформа:

  • Cordova: 5.4.1
  • Cordova-ИСН: 4.0.1
  • IOS, 9.2 (тренажер и реальное устройство)

Я уже добавил Plugin to use the WKWebview, который сделал объект indexedDB хотя бы определенным, но ошибка была выбрана. Код работает в хромовом, сафари и мобильном сафари, если я запускаю его через собственный веб-сервер кордовы.

config.xml выглядит следующим образом

<content src="index.html" /> 
<plugin name="cordova-plugin-whitelist" spec="1" /> 
<access origin="*" /> 
<allow-intent href="http://*/*" /> 
<allow-intent href="https://*/*" /> 
<allow-intent href="tel:*" /> 
<allow-intent href="sms:*" /> 
<allow-intent href="mailto:*" /> 
<allow-intent href="geo:*" /> 
<platform name="android"> 
    <allow-intent href="market:*" /> 
</platform> 
<platform name="ios"> 
    <allow-intent href="itms:*" /> 
    <allow-intent href="itms-apps:*" /> 
</platform> 
<feature name="CDVWKWebViewEngine"> 
    <param name="ios-package" value="CDVWKWebViewEngine" /> 
</feature> 

<preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" /> 

и я пытаюсь открыть IndexedDB с этим:

openDb: function() { 
    var openRequest = window.indexedDB.open(DB_NAME, DB_VERSION); 
    openRequest.onupgradeneeded = function(event) { 
     console.log('upgrade needed'); 
     console.log(event); 
     myIndexDb = event.target.result; 
     var options = { 
      autoIncrement: true, 
      keyPath: 'key' 
     }; 
     var objectStore = myIndexDb.createObjectStore(DB_STORE_NAME, options); 
    }; 
    openRequest.onerror = function(event) { 
     console.log(event); 
     console.log('indexDB open Error!'); 
    }; 
    openRequest.onsuccess = function(event) { 
     console.log('open success'); 
     myIndexDb = this.result; 
    }; 
    openRequest.onblocked = function(event) { 
     console.log('request is blocked'); 
     console.log(event); 
    } 
} 

ответ

0

В настоящее время он работает с Telerik плагин https://github.com/Telerik-Verified-Plugins/WKWebView (и Cordova-ИОС 3.9 .2)

+0

cordova-ios 4.9.2 не существует. Существуют и другие альтернативы плагину telerik: вы используете cordova-ios 4.0.0 или выше http://stackoverflow.com/questions/32405798/state-of-wkwebview-on-cordova-ios-9/32452158#32452158 – jcesarmobile

+0

Это было опечатка - я имел в виду cordova-ios 3.9.2 - И с подключенным «cordova-plugin-wkwebview-engine» indexedDB не работает – kluka

+0

Я нашел, используя PhoneGap Build Я смог использовать плагин CDWKWebViewEngine, если бы добавил его как плагин к моему config.xml - http://stackoverflow.com/questions/35573145/cordova-wkwebview-plugin-with-phonegap-build-6-0-0 Однако пока я не смог успешно вызовите window.indexedDB.open() из моего приложения, хотя window.indexedDB существует. –

0

Способом устранения проблемы с cordova-plugin-wkwebview-engine и IndexedDB является использование локального веб-сервера.

Вы можете использовать плагин wkwebview-engine-localhost для обхода ошибки с добавлением локального веб-сервера. Для установки использования плагина

cordova plugin add https://github.com/apache/cordova-plugins/tree/master/wkwebview-engine-localhost 
+0

Имейте в виду, что вам нужно назначить себе номер фиксированного номера TCP для встроенного веб-сервера, иначе вы будете получать новую базу данных при каждом запуске приложения, а встроенный сервер выбирает новый, случайный, tcp-порт. – jptknta

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