QuotaExceededError The quota has been exceeded

2023-10-27

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

  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 'js-cookie';
import { isObject } from 'lodash';

class StorageHelper {
  private supportKey = 'supportStorage'; // 测试是否支持Storage的key
  private supportStorage = true; // 支持Storage
  private storage; // 存储实例化的storage
  public constructor(storage) {
    try {
      this.storage = storage;
      this.storage.setItem(this.supportKey, '1');
    } catch (e) {
      // ios 10 无痕QuotaExceededError
      if (e.code === 22) {
        this.supportStorage = false;
        return;
      }
    } finally {
      this.storage.removeItem(this.supportKey);
    }
  }

  public transformSet(data) {
    if (isObject(data)) {
      return JSON.stringify(data);
    }
    return data;
  }
  public setItem(key, value = {}) {
    if (this.supportStorage) {
      return this.storage.setItem(key, this.transformSet(value));
    }
    return Cookies.set(key, this.transformSet(value));
  }

  public transformGet(data) {
    if (data && data.startsWith('{')) {
      return JSON.parse(data);
    }
    return data;
  }
  public getItem(key) {
    if (this.supportStorage) {
      return this.transformGet(this.storage.getItem(key));
    }
    return this.transformGet(Cookies.get(key));
  }

  public removeItem(key) {
    if (this.supportStorage) {
      return this.storage.removeItem(key);
    }
    return Cookies.remove(key);
  }

  public clear() {
    if (this.supportStorage) {
      return this.storage.clear();
    }
    // cookie clear 未实现
  }
}

然后我们分别实例化sessionStorage,localStorage

export const sessionStorageHelper = new StorageHelper(sessionStorage);

export const localStorageHelper = new StorageHelper(localStorage);

那么,我们外部直接调用地方,就切换为sessionStorageHelper和localStorageHelper,即可

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QuotaExceededError The quota has been exceeded 的相关文章

  • javascript中如何无限循环

    我尝试使用 0 到 100 和 100 到 0 之间的 while 进行无限循环 但浏览器崩溃了 有没有办法清除浏览器内存 这是我的代码 var a 0 var flag true while true if a lt 100 flag t
  • 使用 AJAX 来回发送信息

    使用 post 你可以向服务器发送信息 但是当你需要从服务器接收信息时怎么办呢 信息如何从可以由 php 变量保存的方式变为可以由 javascript 变量保存的方式 反之亦然 这与您的问题更相关 http docs jquery com
  • 使用最新 Ember Data 版本中的 RESTSerializer 格式化 JSON

    我正在努力将我的 JSON munge 成正确的格式 为了说明这一点 我做了一个快速的 JSfiddle http jsfiddle net chrismasters NQKvy 638 http jsfiddle net chrismas
  • 从 HTML 表单发送数据到 Node.js 服务器

    我正在学习 Node js 我的服务器中有这个 var http require http var url require url http createServer function request response response w
  • Yeoman-Angular 生成的应用程序中缺少 Angular 脚本

    我已经使用 Yeoman Angular Generator 生成了一个应用程序 但项目中缺少 angular js 和其他 Angular 文件 我可以在 Bower json 文件中看到这些依赖项 如下所示 name mi portfo
  • 将 FBX 文件转换为 .gltf 后,模型非常小,为什么?

    问题 将 FBX 文件转换为 gltf 后 模型非常小 为什么 我尝试用以下方法缩放模型frontObject scale set 1000 1000 1000 但我收到以下错误 TypeError Cannot read property
  • 使用 word_number 值对 javascript 数组进行排序

    如何对数组进行排序 var arr new Array word 12 word 59 word 17 这样我得到 word 12 word 17 word 59 Thanks 您需要编写一个排序方法 您可以编写任何您喜欢的方法 该方法在
  • 使用 getElementById 在 javascript 中使用正则表达式进行 Html 表单验证?

    我想使用正则表达式验证 html 表单的示例模式 AAA 111 2222 aa 1234 目前 我的代码要么为所有输入返回 正确 要么为所有输入返回 不正确 并且我无法弄清楚我的问题出在哪里 var x document getEleme
  • 如何正确关闭 Node.js Express 服务器?

    我需要在收到回调后关闭服务器 auth github callback网址 与平常一样HTTP API http nodejs org docs latest api http html关闭 服务器目前支持server close call
  • Javascript 访问 Disqus 评论文本框?

    我正在开发一个浏览器扩展 它应该允许我访问文本框中的评论 帖子 现在很多网站都使用 Disqus 作为评论方式 但在输入文本时我无法找到访问 Disqus 评论框的方法 Disqus API 也没有透露太多信息 有人知道访问它的方法吗 解决
  • 检测 JavaScript 中的焦点丢失

    我希望能够检测 JavaScript 中任意元素何时失去焦点 因此我可以构建一个类似于 jEdit 的内联编辑工具 我不能依赖 jQuery 来实现这个库 所以我需要一个本机方法来完成它 我查看了 onblur 这似乎是正确的事情 但 MD
  • 如何混淆或使 JavaScript 文件不可读?

    我的应用程序中有 JavaScript 脚本 其中包含 JavaScript 和 jQuery 函数 所有用户与我的应用程序的交互都是动态的 并且通过 jQuery 传递到应用程序 我意识到 当我在客户端运行我的应用程序时 客户端可以通过查
  • jQuery live() 和ready() 之间的区别?

    两者之间的确切区别是什么live and ready 编辑 发现die http docs jquery com Events die是相反的live ready http docs jquery com Events ready让你注册一
  • 如何让无限滚动发挥作用?

    我正在尝试让这个无限加载脚本在我的项目中工作 这是我的 HTML div div div class pagina div div class pagina div div class pagina div div class pagina
  • 当元素具有多个类时如何在 switch 语句中检查 className

    在下面的示例中 我只想单击该选项以在警报中显示 我正在尝试使用 switch 语句来确定单击了哪个类 如果我的 div 不包含多个类 则我的示例将有效 我尝试使用classList contains在我的 switch 语句中无济于事 有没
  • 如何在 Astro 中的组件之间共享状态?

    我相信我在代码中采用了错误的方法 如何在按钮单击中设置客户端首选项 该按钮单击用作全局 astro 组件中的道具 或者我应该怎么做 我知道这是可能的 因为 astro js 本身在他们的文档网站中这样做了 下面是我的尝试的解释 我目前正在开
  • jVectorMap - 向下钻取地图 - 自定义背景

    我正在使用 jVectorMap 中的向下钻取地图 并且尝试将自定义背景颜色设置为地图的第二层 为了自定义主级别 我使用 main 参数 但我不知道如何将其扩展到地图的较低级别 提前致谢 马切伊 None
  • 在64位环境中加载32位进程

    我有以下几个问题 CHM 是 编译的 HTML 文件 我的 CHM 文件有一个启动 32 位应用程序的链接 CHM 文件是用 Javascript 编码的 这在 32 位操作系统环境中运行良好 但这在 64 位操作系统环境中不起作用 原因是
  • 如何制作饼图聚合数据源?

    Using 适用于 ASP NET MVC 的 Kendo UI 完整版 http www kendoui com 版本 2013 3 1119 2013年11月20日 如果我有这段代码 status chart kendoChart da
  • ES6解构对象赋值函数参数默认值

    您好 我正在查看在传递函数参数时使用对象解构的示例对象解构演示 https developer mozilla org en US docs Web JavaScript Reference Operators Destructuring

随机推荐

  • [极客大挑战 2019]HardSQL

    我们用万能密码试了一下发现不可行 正常注入发现会过滤and 空格 但没过滤or 可以结合报错注入来做 extractvalue 1 concat 07xe 执行语句 updatexml 1 concat 07xe 执行语句 1 这里面我们用
  • 学习笔记-二分法查找

    二分法查找 要求必须是一个有序数组 才可以进行二分法查找 二分法运用到了递归回溯的思想 思路 1 确定中间数的坐标 mid left right 2 2 如果中间数大于查询的数 说明查询的数在左边 向左递归继续查询 此时left不变 rig
  • Vijava 学习笔记之ResourcePool(基础配置信息)

    Vijava 代码 实体类 package com vmware pojo import java util ArrayList import java util Calendar import java util Date 虚拟机信息 a
  • js引入mathjax时注意事项

    首先 保证网络畅通 必须网络好 不然js响应不回来 需要先在head标签中引入js
  • (阿里云)使用WordPress搭建一个专属自己的博客

    一 创建资源 在页面左侧 单击 云产品资源 下拉列表 查看本次实验所需资源 单击屏幕右侧 创建资源 免费创建当前实验所需云产品资源 说明 资源创建过程需要1 3分钟 完成实验资源的创建后 您可以在 云产品资源 列表查看已创建的资源信息 例如
  • 浅析ARM公司在物联网领域的战略布局

    原文地址 http blog csdn net yefanqiu article details 17006331 随着ARM芯片的出货量越来越多 自信满满的ARM公司统一软硬件平台的战略和雄心壮志越来越凸显 最初ARM公司仅是出售自己的知
  • 解决VMware出现“磁盘实用工具不可用”

    可能有人想用vmware的磁盘映射 但是磁盘映射按钮是灰色的 按钮上面还有一行字 磁盘实用工具不可用 我也遇到过这个问题 上网查了一下 结果网上愣是没有一篇博客说明了这个问题 我想 难道这些人从来没遇到过吗 后来 经过自己的实验 我发现了解
  • 一次serialVersionUID引发的血案

    背景 去掉了两个bean类中重写的equals方法 该equals方法只判断id 相同则true 否则false 看了看没有什么地方用到了这个equals 就直接去掉了 测试环境出现异常 org springframework core c
  • sklearn机器学习——day07

    无监督学习 聚类 分类 聚类算法又叫做 无监督分类 其目的是将数据划分成有意义或有用的组 或簇 sklearn当中的聚类算法 有两种表现形式 类 函数 KMeans是如何工作的 重要参数n clusters n clusters是KMean
  • MySQL高级之SQL优化

    福利 网络安全重磅福利 入门 进阶全套282G学习资源包免费分享 https mp weixin qq com s BWb9OzaB gVGVpkm161PMw 5 SQL优化 5 1 大批量插入数据 环境准备 CREATE TABLE t
  • 【Centos】centos7 NFS共享目录(单机版)

    环境介绍 centos 7 三台机器 服务端 192 168 30 13 提供共享目录 客户端 192 168 30 14 192 168 30 15 挂载使用服务端共享路径 此方案为测试环境单机部署方案 服务端一旦挂了就不可用了 生产环境
  • Windows Server 2016-Windows 时间服务概览

    同步 Windows 时间服务 W32Time 的日期和时间的所有运行 Active Directory 域服务 AD DS 的计算机 时间同步至关重要的许多 Windows 服务和的业务线 LOB 应用正常运行 Windows 时间服务使
  • 获取请求地址路径参数

    package gacl request study import java io IOException import java io PrintWriter import javax servlet ServletException i
  • 华为OD机试 - 非严格递增连续数字序列(Java)

    题目描述 输入一个字符串仅包含大小写字母和数字 求字符串中包含的最长的非严格递增连续数字序列的长度 比如12234属于非严格递增连续数字序列 输入描述 输入一个字符串仅包含大小写字母和数字 输入的字符串最大不超过255个字符 输出描述 最长
  • CleanMyMac X 4.13.4许可证激活码2023最新免费版

    小伙伴们 你们好 今天兔八哥爱分享来聊聊cleanmymac X如何激活 关于cleanmymac的基本情况说明介绍的文章 网友们对这件事情都比较关注 那么现在就为大家来简单介绍下 希望对各位小伙伴们有所帮助 在不断更新的版本中 Clean
  • 论文p5解释 Bootstrap开关电路

    M7 M3这种箭头指回去的是P型 这是开关电路 也叫Bootstrap开关电路 所以分析的时候不用考虑是耗尽型或者增强型 只考虑高低电平打开和关闭开关 1 Clks是高电平时 详细分析图如下 最终目的是Cs上极板接到Vdd 下极板接地 于是
  • 如何用Python进行大数据挖掘和分析

    互联网创业离不开数据 如果能自己做个数据爬虫 那岂不是一件很美好的事情吗 其实自己做数据挖掘不是梦 学点Python的基本功能 5步就能让你成为一个爬虫高手
  • 影响力六大原则讲解

    文章目录 写在前面 互惠原则 承诺一致原则 社会认同 喜好 权威 稀缺 写在前面 人虽然是万物之灵 但还是有很多类似动物的本能 受很多其他因素的影响很多时候就像膝跳反射一样本能的发生着 影响着我们做的一个选择 正所谓 一言不合就XX 我们这
  • 【CSDN铁粉】CSDN铁粉增长终极奥义之如何快速破千铁粉

    文章目录 写在前面 涉及知识 1 铁粉是个啥 2 铁粉如何增长 1 持续的优质创作 2 与粉丝周期互动 3 参加活动与比赛 3 铁粉对您的意义 总结 写在前面 其实我也是下午去看那个6月份的城市获奖的名单时候 无意的去看了一下CSDN官方博
  • QuotaExceededError The quota has been exceeded

    一 前言 我首先描述下 这种报错出现的场景 ios lt 10 真机 Safari 的无痕浏览模式 使用localStorage or sessionStorage 的 setItem 当然 问题肯定社区有解决方案 以下链接可以满足你想要的