2017-06-13 110 views
0

根據[Cordova Storage IndexedDB](https://cordova.apache.org/docs/en/7.x/cordova/storage/storage.html#indexeddb)文檔,存儲空間大約爲5MB(Disadvantages段落的最後一點)。如何爲Android上的Cordova應用程序的IndexedDB授予無限制的持久性存儲權限?

5MB爲DATABASE,嚴重嗎?對我而言,我需要爲我的應用程序提供更多的存儲空間,因此我必須在沒有其他選擇的情況下打破監獄。

第1輪:詢問更多存儲配額。

navigator.webkitPersistentStorage.requestQuota(quota, function(granted) { 
    window.requestFileSystem(window.PERSISTENT, granted, cbSucc, cbErr); 
}, cbErr); 
  1. 的 '授予' 送花兒給人零不管是什麼 '配額' 的。
  2. Android webview上的'window'對象中沒有requestFileSystem()函數。
  3. 基於(https://stackoverflow.com/a/42355894):它只適用於沙盒文件系統。也許這不是我所需要的。

第2輪:實現推送通知服務工作器,它將自動授予持久存儲權限。

navigator.serviceWorker.register('sw.js') 
.then(function(swNotify) { 
    swNotify.pushManager.subscribe({ 
     userVisibleOnly : true, 
     applicationServerKey : pubKey 
    }); 
}); 
  1. 服務工作者註冊。
  2. Android webview上沒有PushManager,因此無法執行pushManager.subscribe()。
  3. 這適用於除了webview以外的桌面和Android版Chrome。

第3輪:詢問持久存儲權限。

navigator.storage.persist().then(...); 
  1. 的堅持()函數總是返回而不要求用戶授予權限假。
  2. WRITE_EXTERNAL_STORAGE權限已被請求和授予。

環境:

  • 機器人:7.0(通過Android模擬器)
  • web視圖:58.0.3029.83
  • 科爾多瓦:科爾多瓦7.0.1
  • 的Andorid平臺:6.2.3

我仍然是5MB監獄的囚徒,我還能做些什麼呢?

回答

0

您可以使用cordova-sqlite-storage插件創建擁有無限存儲的本地SQLite數據庫:

不同於集成到網頁視圖索引資料庫(和的WebSQL),這款採用存儲在一個.db文件在本地數據庫磁盤。

目前沒有IndexedDB接口墊片(雖然它在TODO list上),所以您需要重新調用API調用數據庫。然而,例如,對於Lawnchair,存在adapter,這使得易於使用的API成爲可能。

+0

謝謝戴夫,但我認爲用RDB替換NoSQL可能不是一個好理想。它必須從系統架構開始重做。 –

+0

Lawnchair爲您提供了一個鍵/值存儲界面(類似於IndexedDB)。實際的底層數據庫可能是一個RDB,但這是不相關的,因爲它的接口被抽象爲非關係型。 – DaveAlden

+0

再次感謝Dave和我會尋找cordova-sqlite-storage插件。 –