navigator.storage.persist() 是否只能在存储压力的情况下防止数据删除?

问题描述 投票:0回答:1

根据 MDN 文档 浏览器存储的数据可以在三种情况下被驱逐:

  • 存储压力驱逐
  • 浏览器最大存储超出驱逐
  • 主动驱逐

对于第一种情况 - “存储压力驱逐” - 文档提到可以通过使用

navigator.storage.persist()

来避免数据丢失

这是

navigator.storage.persist()
有效果的唯一情况,还是在其他情况下也有效果?

我特别担心 iOS 上 Safari 的“主动驱逐”,因为数据可以在 7 天不活动后被删除

javascript local-storage progressive-web-apps indexeddb web-storage
1个回答
0
投票

是的,它对所有情况都有影响。根据规范

未经用户同意,持久存储桶无法清除

因此,用户代理(浏览器)不应尝试删除数据,无论是由于存储压力还是在未经用户批准的情况下不活动

您也可以在 MDN 示例 中看到它

if (persistent) {
  console.log("Storage will not be cleared except by explicit user action");
}

请注意,用户仍然可以随时删除数据,因此如果数据确实敏感,您应该在某处保留其备份。正如阅读这里

服务器设置的 Cookie 不受此驱逐影响

因此您可以在 cookie 中存储一个 id,然后使用该 id 在服务器中保留数据备份,以防如果客户端上的某些数据丢失,您的应用程序可能会崩溃。客户数据永远不可靠,所以请记住这一点。但如果用户授予使用权限

persist
,那么它应该不会被自动删除。

© www.soinside.com 2019 - 2024. All rights reserved.