【问题标题】:Cordova iOS losing storage on app shut downCordova iOS 在应用程序关闭时丢失存储空间
【发布时间】:2017-02-22 00:50:55
【问题描述】:
正在开发适用于 iOS 和 android 的 cordova 应用程序。测试一些新功能时,我注意到在我通过 xcode 停止应用程序或在手机的多任务视图中关闭它之后,我的 localStorage 数据没有保留。认为这是因为 localStorage 不一定是永久的,我转而使用 PouchDB,它通过 indexdb/websql 存储它。我也遇到了同样的问题。
我正在使用 WKWebview 插件,所以我不知道这是否是原因。我已经在我的笔记本电脑上测试了 pouchdb 在 chrome 中的使用,我遇到的问题为零。
编辑
在安卓上测试过,同样的问题。强制退出应用会清除 indexdb 数据。
【问题讨论】:
标签:
javascript
ios
cordova
【解决方案1】:
不是一个真正的答案,但我最终解决了这个问题。我没有保存到 localstorage 或 websql,而是使用文件插件编写了一个 JSON 文件。
function getFileEntry() {
return new Promise((resolve, reject) => {
// 1mb
window.requestFileSystem(window.LocalFileSystem.PERSISTENT, 1024 * 1024, (fs) => {
fs.root.getFile('settings.json', { create: true, exclusive: false }, (fileEntry) => {
resolve(fileEntry);
}, (e) => {
console.log(`error reading file ${fs.root.nativeURL}settings.json`);
reject(e);
});
}, (e) => {
console.log('error requesting persistent FS');
reject(e);
});
});
}
export function fileApiAvailable() {
return window.cordova && window.cordova.file;
}
export function readFile() {
return getFileEntry().then((fileEntry) => {
return new Promise((resolve, reject) => {
fileEntry.file((file) => {
const reader = new FileReader();
reader.onloadend = function() {
if (this.result) {
resolve(JSON.parse(this.result));
} else {
resolve(null);
}
};
reader.readAsText(file);
}, (e) => {
console.log('issue reading the file');
reject(e);
});
});
});
}
export function saveSettingsToFile(settings) {
if (!fileApiAvailable()) {
return Promise.resolve();
}
return getFileEntry().then((fileEntry) => {
return new Promise((resolve, reject) => {
fileEntry.createWriter((fileWriter) => {
fileWriter.onwriteend = () => {
resolve();
};
fileWriter.onerror = (e) => {
reject(e);
};
fileWriter.write(JSON.stringify(settings));
});
});
});
}