【问题标题】:Setting the value of 'dataURL' exceeded the quota设置“dataURL”的值超出了配额
【发布时间】:2014-07-21 13:50:27
【问题描述】:

我有一个将字符串保存到本地存储的 JavaScript 代码,字符串大小为 400000,

var dataURL = canvas.toDataURL("image/jpg").toString();
localStorage.setItem("dataURL", dataURL);

我从 chrome 打开 html 文件,在一台计算机上它在我得到的另一台计算机上正常

未捕获的 QuotaExceededError:无法执行“setItem” 'Storage': 设置 'dataURL' 的值超出配额。

在这台计算机上,我允许保存的字符串长度不超过 100000 个字符。 两台电脑都有相同的 chrome 版本 35.0.1916.114 m 为什么?

【问题讨论】:

  • 可能是浏览器中设置的首选项、每台计算机上的可用磁盘空间或其他一些环境差异。
  • 试试这个 try { var count = 100; var message = "LocalStorageIsNOTFull"; for (var i = 0; i

标签: javascript html google-chrome local-storage


【解决方案1】:

当您的浏览器达到最大限制时,它会抛出此错误 无法在“存储”上执行“setItem”:设置“”的值超出了配额。

  • 你可以这样处理

 try {
     var count = 100;
     var message = "LocalStorageIsNOTFull";
     for (var i = 0; i <= count; count + 250) {
         message += message;
         localStorage.setItem("stringData", message);
         console.log(localStorage);
         console.log(count);
     }

 }
 catch (e) {
     console.log("Local Storage is full, Please empty data");
     // fires When localstorage gets full
     // you can handle error here or empty the local storage
 }

【讨论】:

    【解决方案2】:

    这种类型的错误也可能由于以下原因而发生:

    在单个 localStorage 键中存储值是有限制的。

    例如,如果我写 localStorage.setItem('data',allData); 那么 'data' 键有一个限制,它可以在 'allData' 值中存储指定数量的字符。

    在 chrome 和 firefox 中,您最多可以在一个键中存储 5200000 个字符。您可以访问此网站https://arty.name/localstorage.html

    查看浏览器限制

    因此,要解决此问题,您必须检查您尝试存储在单个键中的字符数。

    如果您超出了 localStorage 键的值大小,则必须将大小减小到适当的限制。

    【讨论】:

      【解决方案3】:

      chrome 本地存储默认为 25M,因此请明确您的 chrome 本地存储是否可以使用。祝你好运!

      【讨论】:

      【解决方案4】:

      使用localStorage.clear(); 清除本地存储对我有用。

      如果您使用的是 Firefox,您可能需要使用 window.localStorage.clear();

      【讨论】:

        【解决方案5】:

        这取决于浏览器偏好和磁盘空间。在https://arty.name/localstorage.html 比较您的两台计算机的浏览器并检查它们是否存储相同的编号。的字符。你会看到区别。

        【讨论】:

        • 你说的是对的,但我给出了一个链接,可以证明我试图解释的内容。我不认为我们可以在这里运行代码 sn-p 来给出这些结果。或者有没有办法做到这一点?
        【解决方案6】:

        下面的代码可以让您在本地存储中保存最多的数据量,而不会在存储超出时清除它。

        const setInLocalStorage = (keyName, value) => {
          try {
              localStorage.setItem(keyName, JSON.stringify(value));
          } catch (error) {
              console.log('Error in local storage', error);
              setInLocalStorage(keyName, JSON.parse(localStorage.getItem(keyName)));
          }
        };

        【讨论】:

          猜你喜欢
          • 2021-07-21
          • 2018-09-30
          • 1970-01-01
          • 2021-07-28
          • 1970-01-01
          • 2018-04-09
          • 2017-08-15
          • 2012-04-29
          • 1970-01-01
          相关资源
          最近更新 更多