PWA应用程序中IndexedDB的持久性

时间:2019-10-31 11:55:21

标签: progressive-web-apps indexeddb

PWA应用程序存储(IndexedDB)无法提供数据持久性。

如果将PWA固定到主屏幕,则可以通过清除浏览历史记录来清除浏览器中的所有应用程序数据。

对于用户来说,可能不清楚清除浏览器数据会影响固定的应用程序,并且不同步的数据将丢失。

有什么办法可以避免这种情况? 我目前看到的唯一方法-回到本地应用。

3 个答案:

答案 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,将在感觉到数据时清除数据(想想可用磁盘空间变得至关重要时),这将使您失去控制权。据我所知,它也是针对本机应用程序执行的。