【问题标题】:Is there a way to execute a function when user tries to delete an indexedDB database?当用户尝试删除 indexedDB 数据库时,有没有办法执行函数?
【发布时间】:2014-10-03 19:51:44
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript html indexeddb offline-storage


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-18
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多