当 localStorage 写入失败:Safari 无痕模式与存储配额的真实处理方式
做前端持久化时,localStorage 通常是最先被想到的方案,API 同步、简单、兼容性也足够好。但它在真实环境里并不是永远可写:Safari 无痕模式下 setItem 会直接抛出 QuotaExceededError;用户关闭站点存储、浏览器剩余空间不足或单域名超过配额时也会失败。更麻烦的是,很多代码只包一层 try/catch 就完事,页面状态已经更新,存储却没写进去,刷新后数据丢失。这篇文章讨论在哪些情况下 localStorage 会写入失败,如何区分不同类型的异常,以及怎样用内存降级、IndexedDB 回退和写入前检查来让功能在受限环境里仍然可用。