使用适用于iOS和Android的cordova应用程序。测试一些新功能,我注意到我的localStorage数据没有保留,我会通过xcode停止应用程序,或者在手机的多任务处理视图中关闭它。认为这是因为localStorage不一定是永久性的,我转而使用PouchDB,它通过indexdb / websql存储它。我遇到了同样的问题。
我正在使用WKWebview插件,所以我不知道这可能是原因。我已经在笔记本电脑上测试了pouchdb在chrome中的使用情况,我没有遇到任何问题。
修改
在android上测试,同样的问题。强制退出应用程序会清除indexdb数据。
答案 0 :(得分: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));
});
});
});
}