授予无限制持久存储权限

时间:2017-06-13 07:31:09

标签: android cordova webview indexeddb

根据IndexedDB of Cordova Storage文档,存储空间限制在5MB左右(劣势段落的最后一点)。

我的应用程序需要更多存储空间,因此我必须在没有任何其他选项的情况下打破监狱。

第1轮:要求更多存储空间配额。

navigator.webkitPersistentStorage.requestQuota(quota, function(granted) {
    window.requestFileSystem(window.PERSISTENT, granted, cbSucc, cbErr);
}, cbErr);
  1. 授予'总是零,无论什么'配额'是
  2. '窗口中没有requestFileSystem()函数。 Android webview上的对象。
  3. 基于(https://stackoverflow.com/a/42355894):它仅适用于沙盒文件系统。也许这不是我所需要的。
  4. 第2轮:实现推送通知服务工作者,该服务工作者将自动授予持久存储权限。

    navigator.serviceWorker.register('sw.js')
    .then(function(swNotify) {
        swNotify.pushManager.subscribe({
            userVisibleOnly : true,
            applicationServerKey : pubKey
        });
    });
    
    1. 服务人员已注册。
    2. Android webview上没有PushManager,因此无法执行pushManager.subscribe()。
    3. 这适用于桌面和Android上的Chrome,除了webview。
    4. 第3轮:要求持久的存储许可。

      navigator.storage.persist().then(...);
      
      1. persist()函数始终返回false,而不要求用户授予权限。
      2. 已请求并授予WRITE_EXTERNAL_STORAGE权限。
      3. 环境:

        • Android:7.0(由Android Emulator提供)
        • WebView:58.0.3029.83
        • Cordova:7.0.1
        • 科尔多瓦的andorid平台:6.2.3

        我仍然是5MB监狱的囚犯,我还能做什么呢?

1 个答案:

答案 0 :(得分:0)

您可以使用cordova-sqlite-storage插件创建具有无限存储空间的原生SQLite数据库:

与集成到Webview中的IndexedDB(和WebSQL)不同,它使用存储在磁盘上.db文件中的本机数据库。

目前没有IndexedDB接口填充程序(虽然它位于TODO list),因此您需要重新编写对数据库的API调用。但是,例如,adapter Lawnchair可以生成易于使用的API。