0

WebExtensionsを使用してChrome拡張機能をFirefoxに移植しています。WebExtensions経由でFirefoxのbrowser.storage.localのサイズを取得

StorageArea.getBytesInUse();はFireFoxではサポートされていませんが、ローカルストレージオブジェクトの合計サイズを取得する回避策はありますか?

ストレージが限界に近づいたときにclearCache関数を呼び出す必要があります。ここで

+1

を:/ /dxr.mozilla.org/mozilla-central/source/toolkit/components/extensions/ExtensionStorage.jsm#119)ので、保存されたデータ全体を定期的に取得し、シリアル化された長さ(たとえば5MB)を確認する必要があるでしょう。 – wOxxOm

答えて

1

は、あなたが使用することができます何かの始まりである:ここ

browser.storage.local.get(null) 
    .then(store => { 
      var bytes = 0; 
      for (var p in store) { 
       var entry = store[p]; 
       switch (typeof(p)) { 
        case 'number': 
         bytes += 8; 
         break; 
        case 'boolean': 
         bytes += 4; 
         break; 
        case 'string': 
         bytes += (entry.length * 2); 
         break; 
        case 'undefined': 
         bytes += 0; 
         break; 
        case 'object': 
         if (entry === null) { 
          bytes += 0; 
         } else { 
          if (entry.byteLength) { 
           bytes += entry.byteLength; 
          } else if (entry.buffer) { 
           bytes += entry.buffer.byteLength; 
          } else { 
           // todo: recrusively run this on all entries 
          } 
         } 
         break; 
        case 'array': 
         // todo: recursively run this on all elements 
         break; 
        default: 
         if (
         } 
       } 
      }); 
     .catch(ex => console.warn('run borwser.storage.local.get again as it hit error, ex:', ex)); 

ソリューションは、いくつかの再帰的なものを提供 - (HTTPS、どうやら `.set` [インターセプト例外]の現在のFF実装をhttps://stackoverflow.com/a/6351386/1828637

+0

ありがとう、私はすでにいくつかのスクリプトを持っていますが、私は両方を比較します。あなたのスクリプトはライセンスを持っていますか? @JuliusS。 –

+0

- 私はそれを書いただけで致命的なものはなく、ちょうどそれを盗んで行ってしまいました。私はこれに返答していたので、数分でそれをやりました。 – Noitidart

関連する問題