2012-11-14 77 views
6

有沒有什麼辦法可以增加chrome.storage.sync.QUOTA_BYTES_PER_ITEM?我可以在Chrome中增加QUOTA_BYTES_PER_ITEM嗎?

對我來說,默認的4096字節有點短。

我試圖執行

chrome.storage.sync.QUOTA_BYTES_PER_ITEM = 8192; 

然而,似乎是實際的限制並沒有改變。

我該怎麼做?

+0

注意:截至1/15/16,QUOTA_BYTES_PER_ITEM的(默認)值現在爲8K。 –

回答

6

不,QUOTA_BYTES_PER_ITEM僅供參考;這不是一個可設定的價值。你可以使用的QUOTA_BYTES_PER_ITEM價值高達拆分項目插入多個項目,但:

function syncStore(key, objectToStore, callback) { 
    var jsonstr = JSON.stringify(objectToStore); 
    var i = 0; 
    var storageObj = {}; 

    // split jsonstr into chunks and store them in an object indexed by `key_i` 
    while(jsonstr.length > 0) { 
     var index = key + "_" + i++; 

     // since the key uses up some per-item quota, see how much is left for the value 
     // also trim off 2 for quotes added by storage-time `stringify` 
     var valueLength = chrome.storage.sync.QUOTA_BYTES_PER_ITEM - index.length - 2; 

     // trim down segment so it will be small enough even when run through `JSON.stringify` again at storage time 
     var segment = jsonstr.substr(0, valueLength);   
     while(JSON.stringify(segment).length > valueLength) 
      segment = jsonstr.substr(0, --valueLength); 

     storageObj[index] = segment; 
     jsonstr = jsonstr.substr(valueLength); 
    } 

    // store all the chunks 
    chrome.storage.sync.set(storageObj, callback); 
} 

然後編寫出鍵和膠水對象取回來一起類似的取功能。

+0

你的代碼似乎有一個無限循環。請將'while'循環的最後一行更新爲'jsonstr = jsonstr.substr(chrome.storage.sync.QUOTA_BYTES_PER_ITEM);'。 –

+0

你還需要一個'i ++'的地方。 –

+0

另請注意,當Chrome檢查chrome.storage.sync.QUOTA_BYTES_PER_ITEM時,它會計算所保存值的長度,並計算**鍵**的長度。因此,當使用'substr'時,你需要使用'chrome.storage.sync.QUOTA_BYTES_PER_ITEM - currentKeyLength'。 –

1

我爲我的擴展程序創建了一個small class,它處理從chrome.storage.sync保存和檢索比QUOTA_BYTES_PER_ITEM更長的字符串。我基於@apsillers貢獻的代碼片斷編寫代碼。

相關問題