2

是否有类似 ondelete 事件处理程序或在用户想要清除 indexedDB 数据库之前警告用户的方法。

背景:有一个离线第一个应用程序,它通过在离线时将大部分数据保存在 indexedDB 上来工作。现在,当用户上网时,它会尝试将数据同步到服务器,但是,现在,如果有人错误地重置浏览器或清除 indexedDB,他们可能会造成灾难,因为他们有需要同步到服务器的重要数据。

那么,有没有办法克服这个问题呢?有没有办法将 indexedDB 保存为持久文件系统或禁用删除或引发事件并在删除时正确处理?

4

1 回答 1

4

不会。尽管我们中的一些人如何使用它,但不能保证 IndexedDB 数据库中的数据会保留在那里。这是设计使然,它是“临时”存储。如果需要,浏览器可以释放空间。当最终可以将 IndexedDB 数据存储为“持久”数据时,情况会有所改善,但永远无法保证数据不被删除。恕我直言,用户应该能够删除他们计算机上的数据,如果这不是真的,那将是一个严重的问题。

而且问题可能比您意识到的还要严重。例如,这是 Chrome 中的一个错误(也可能在其他浏览器中)。如果用户说“删除我过去 24 小时内的 cookie 和站点数据”,Chrome 将彻底删除过去 24 小时内更改过的所有 IndexedDB 数据库。因此,如果您的数据库中有 5000 个对象在一年前创建但此后从未更改过,而其中一个对象今天已被编辑,那么它们都会被删除。这可能会让用户感到困惑,但据我所知,没有人提出过好的解决方案。

唯一的解决方法是同步到服务器,这显然不是 100% 可靠的。因此,如果您有任何非常重要的数据,它可能不应该在网站的 IndexedDB 数据库中,除非作为缓存。

于 2014-10-04T04:12:37.260 回答