基于IndexedDB of Cordova Storage文档,存储空间限制在 5MB 左右(缺点段落的最后一点)。
我的应用程序需要更多存储空间,因此我必须别无选择地越狱。
第 1 轮:请求更多存储配额。
navigator.webkitPersistentStorage.requestQuota(quota, function(granted) {
window.requestFileSystem(window.PERSISTENT, granted, cbSucc, cbErr);
}, cbErr);
- 无论“配额”是多少,“授予”始终为零。
- 在 Android webview 的 'window' 对象中没有 requestFileSystem() 函数。
- 基于 ( https://stackoverflow.com/a/42355894 ) :它仅适用于沙盒文件系统。也许这不是我所需要的。
第 2 轮:实现一个推送通知服务 worker ,它将自动授予持久性存储权限。
navigator.serviceWorker.register('sw.js')
.then(function(swNotify) {
swNotify.pushManager.subscribe({
userVisibleOnly : true,
applicationServerKey : pubKey
});
});
- Service Worker 已注册。
- Android webview 上没有 PushManager,因此无法执行 pushManager.subscribe()。
- 这适用于桌面版 Chrome 和 Android(webview 除外)。
第 3 轮:请求持久存储许可。
navigator.storage.persist().then(...);
- persist() 函数总是返回 false 而不要求用户授予权限。
- 已请求并授予 WRITE_EXTERNAL_STORAGE 权限。
环境:
- Android:7.0(通过 Android 模拟器)
- WebView :58.0.3029.83
- Cordova :7.0.1
- Cordova的andorid平台:6.2.3
我仍然是 5MB jail 的囚犯,我还能做什么?
最佳答案
您可以使用 cordova-sqlite-storage用于创建具有无限存储空间的原生 SQLite 数据库的插件:
与集成到 Webview 中的 IndexedDB(和 WebSQL)不同,它使用存储在磁盘上的 .db
文件中的本地数据库。
目前没有 IndexedDB 接口(interface)垫片(尽管它在 TODO list 上)所以您需要重新处理对数据库的 API 调用。但是,例如,有一个 adapter对于Lawnchair这使得 API 易于使用。
关于android - 授予无限持久存储权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44515003/