当用户试图删除indexedDB数据库时,是否有方法执行函数

Is there a way to execute a function when user tries to delete an indexedDB database?

本文关键字:是否 有方法 执行 函数 数据库 用户 删除 indexedDB      更新时间:2023-09-26

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

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

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

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

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

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