PWA应用程序存储(IndexedDB)无法提供数据持久性。
如果将PWA固定到主屏幕,则可以通过清除浏览历史记录来清除浏览器中的所有应用程序数据。
对于用户来说,可能不清楚清除浏览器数据会影响固定的应用程序,并且不同步的数据将丢失。
有什么办法可以避免这种情况? 我目前看到的唯一方法-回到本地应用。
答案 0 :(得分:0)
我不知道如何解决。 Chrome中“清除存储空间”的功能(例如)可以做到这一点。我认为用户能够从自己的设备中删除任何数据是合理的,但是我同意这对开发人员来说不是一个好情况。
答案 1 :(得分:0)
这不可能。
Storage API提供了一种StorageManager.persist()
方法来请求用户显式权限来保留数据,直到被用户本身删除为止:
if (navigator.storage && navigator.storage.persist)
navigator.storage.persist().then(function(persistent) {
if (persistent)
console.log("Storage will not be cleared except by explicit user action");
else
console.log("Storage may be cleared by the UA under storage pressure.");
});
如果本地存储空间不足,则用户代理将自动修剪包含设置为“持久”的那些资源以外的缓存资源。但是,如果用户自己选择清除本地数据,则无法防止这种情况。
据我所知,没有任何事件可以拦截以检测用户对浏览器的清除操作。
答案 2 :(得分:0)
浏览器中明确的存储机制是让用户控制其设备。
这就是为什么作为应用程序的您(本地或Web)永远都不应假定已缓存的资产已被缓存。
如果确保您拥有核心资产和数据持久对您而言绝对重要,那么在服务工作者启动时,您需要进行某种完整性检查。这样,您可以在应用程序离线时恢复缓存状态。
您还需要了解操作系统,看看您的iOS,将在感觉到数据时清除数据(想想可用磁盘空间变得至关重要时),这将使您失去控制权。据我所知,它也是针对本机应用程序执行的。