0

我使用WebExtensions將Chrome擴展移植到Firefox。通過WebExtensions獲取Firefox中browser.storage.local的大小

由於StorageArea.getBytesInUse();在FireFox中不受支持,是否有任何解決方法來獲取本地存儲對象的總大小?

當存儲接近極限時,我需要調用clearCache函數。

+1

顯然,目前的FF執行'.set' [攔截異常(HTTPS:/ /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://stackoverflow.com/a/6351386/1828637

+0

謝謝,我已經有一些腳本,但我會比較兩者。你的腳本是否有許可證? –

+0

@JuliusS。 - 我只是把它寫下來,沒有任何聲明,只是偷了它,然後去:)我在幾分鐘內做了它,因爲我在回答這個問題,請點擊它並在這裏分享你的工作。 – Noitidart

相關問題