QuotaExceededError(DOM 异常 22):隐身模式下 Safari 已超出配额

QuotaExceededError (DOM Exception 22): The quota has been exceeded on Safari in incognito

当我处于隐身模式时,我在 Safari 上 QuotaExceededError (DOM Exception 22): The quota has been exceeded.

我遇到过这样的类似问题:QuotaExceededError: Dom exception 22: An attempt was made to add something to storage that exceeded the quota

但是他们谈论 setItem,我在其他地方得到这个错误。

我在这一行收到此错误:localStorage['gallery.extensions'] = JSON.stringify({});localStorage['asdf'] = 'asdfg';

我尝试组合 this answer 并将 localStorage['asdf'] = 'asdfg'; 之类的每一行替换为 localStorage.setItem('asdf', 'asdfg') 并将 localStorage['asdf'] 之类的每个访问替换为 localStorage.getItem('asdf') 但那没有也无济于事。

您不能在隐身模式下使用本地存储。通过将 setItem 或 getItem 调用包装在 try/catch 中,有助于您的代码处理本地存储的失败使用,然后提醒用户他们需要在非私有模式下使用您的应用程序。

您遇到的错误是设计使然。

编辑 2021: 您现在可以在隐身模式下使用 localStorage。当您 运行 超出每个 app/domain 允许的存储 space 限制时,也会发生此错误。在撰写本文时,大多数浏览器限制为 10mb。

接受的答案不正确。当 localStorage.setItem 内存不足并抛出错误时,就会发生这种情况。正如另一位评论者所写,始终将 setItem 包装在 try {} catch() {}