2012-11-14 11 views
6

Czy jest jakiś sposób na zwiększenie chrome.storage.sync.QUOTA_BYTES_PER_ITEM?Czy mogę zwiększyć QUOTA_BYTES_PER_ITEM w Chrome?

Dla mnie domyślne 4096 bajtów jest trochę krótkie.

Próbowałem wykonać

chrome.storage.sync.QUOTA_BYTES_PER_ITEM = 8192; 

Wydaje się jednak, że rzeczywista granica nie zmienia.

Jak mogę to zrobić?

+0

Uwaga: od 1/15/16 (domyślnie) wartość QUOTA_BYTES_PER_ITEM wynosi teraz 8 KB. –

Odpowiedz

6

Nie, QUOTA_BYTES_PER_ITEM jest dostępny tylko w celach informacyjnych; nie jest wartością możliwą do ustawienia. Można użyć wartości QUOTA_BYTES_PER_ITEM podzielić element na wiele rzeczy, ale:

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); 
} 

Następnie napisać analogiczną funkcję, która pobiera pobrania przez klucz i klejów obiektu wraz z powrotem.

+0

Wygląda na to, że w twoim kodzie jest nieskończona pętla. Zaktualizuj ostatnią linię pętli 'while' do' jsonstr = jsonstr.substr (chrome.storage.sync.QUOTA_BYTES_PER_ITEM); '. –

+0

Będziesz także potrzebował gdzieś 'i ++'. –

+0

Należy również pamiętać, że gdy Chrome sprawdza "chrome.storage.sync.QUOTA_BYTES_PER_ITEM", oblicza długość zapisywanej wartości, ale także długość ** klucza **. Dlatego podczas używania 'substr' musisz użyć czegoś w stylu' chrome.storage.sync.QUOTA_BYTES_PER_ITEM - currentKeyLength'. –

1

Utworzono small class dla mojego rozszerzenia, które obsługuje zapisywanie i pobieranie ciągów dłuższych niż QUOTA_BYTES_PER_ITEM z chrome.storage.sync. Oparłem swój kod na urywku przesłanym przez @apsillers.

Powiązane problemy