QuotaExceededError The quota has been exceeded

当在iOS 10及以下版本的Safari无痕浏览模式中使用localStorage或sessionStorage时,可能会遇到QuotaExceededError。为解决此问题,可以检测浏览器是否支持这些存储并提示用户切换模式,或者在不支持时默认切换到cookie存储。由于cookie存储空间有限,建议只用于少量数据。本文提供了检测和切换到cookie的实现代码。
摘要由CSDN通过智能技术生成

(一)前言
我首先描述下,这种报错出现的场景

  1. ios <= 10 真机 Safari 的无痕浏览模式
  2. 使用localStorage or sessionStorage 的 setItem

当然,问题肯定社区有解决方案,以下链接可以满足你想要的答案
问题链接1
问题链接2
问题链接3

(二)解决过程

如果你看完,那么问题可以总结为,两个方向

  1. 是我们h5站点增加检测是否支持,并提示用户切换模式
  2. 我们在不支持情况,默认切到cookie

当然因为cookie本身储存空间不大,所以建议如果本地存储大量数据,不建议用2,以下为2中支持提供代码

检测是否支持

function isStorageNameSupported(storage) {
   
    var testKey = 'test';
    try {
   
        storage.setItem(testKey, '1');
        storage.removeItem(testKey);
        return storage in win && win[storage];
    } catch (error) {
   
        return false;
    }
}

默认切换到cookie

因为cookie需要字符串处理,所以安装一个包
js-cookie

首先实现一个storageHelper类,提供切换

import Cookies from
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值