JSブラウザlocalStorageストレージ上限の取得


基本的な考え方:文字列に文字を増やし続け、localStorageを呼び出す.setItemは、格納できないまで格納されます(exceeded the quota:限度額を超えます).
注意事項:
  • で与えられた文字列は小さすぎてはいけません.そうしないと、jsコードの実行が非常に遅くなり、大きすぎてはいけません.そうしないと、大きな誤差をもたらします.
  • まずlocalStorageをオーバーリミットさせる初期の文字列を2倍に重ねて取得し、その半分を取り、半分の半分を減らして、オーバーリミットしているかどうかを判断し、なければ、説明データ量が足りないので、半分の半分の半分を加えて、オーバーリミットしている場合は、説明データ量が多すぎて、半分の半分を減らして、1回に半分の値が0になるまで内押しします.
  • の異なるブラウザタイプとバージョンでは、対応するlocalStorageストレージが一致しない可能性があります.
  • // 5MB: 5242880
    function getLocalStorageSize () {
         
      let str = '1'
      while(1) {
          //       str    localStorage     
        str += str
        try {
         
          localStorage.removeItem('cache')
          localStorage.setItem('cache', str)
        } catch (err) {
         
          console.log(err.name)
          break;
        }
      }
      console.log(str.length) // 8388608
      let half = str.length / 2
      let isAdd = 0
      let len = str.length
      let resStr = ''
      while (half) {
         
        half = Math.floor(half / 2)
        if (isAdd) {
          //  
          len = len + half
        } else {
          //  
          len = len - half
        }
        resStr = str.slice(0, len)
        try {
         
          localStorage.removeItem('cache')
          localStorage.setItem('cache', resStr)
          isAdd = 1
        } catch (err) {
         
          console.log('err', err)
          // err DOMException: Failed to execute 'setItem' on 'Storage': Setting the value of 'cache' exceeded the quota.
          isAdd = 0
        }
      }
      console.log(`chrome: ${
           resStr.length}B ${
           resStr.length / 1024 / 1024}MB`) // chrome: 5242875B ≈5MB 
    }
    getLocalStorageSize()