Chrome API: Runtime QUOTA_BYTES_PER_ITEM quota exceeded 错误,但预检通过
Chrome API: Runtime QUOTA_BYTES_PER_ITEM quota exceeded Error, but precheck passes
我在尝试将对象保存到存储时遇到 QUOTA_BYTES_PER_ITEM 超过配额错误,但我对大小的预检查通过了。我确定我在这里犯了一些基本错误(这是检查对象大小的有效方法吗?)。我已经用LZString压缩了我要保存的项目,但不管怎样,它似乎比配额小很多。
var objToSave = {};
objToSave[myKey] = compressedObj;
console.log("Size of obj is: " + JSON.stringify(objToSave).length); //prints 3452
console.log(chrome.storage.sync.QUOTA_BYTES_PER_ITEM); //prints 8192
if (JSON.stringify(objToSave).length >= (chrome.storage.sync.QUOTA_BYTES_PER_ITEM)) { // this never triggers
alert('objToSave is too large!');
return;
}
chrome.storage.sync.set(objToSave, function() {
if (chrome.runtime.lastError) { // this error gets triggered.
console.log("Error: " + chrome.runtime.lastError.message); // this error gets triggered.
return customAlert("Error!: " + chrome.runtime.lastError.message);
}
});
谢谢@nishant 和@wOxxOm - 这正是错误所在。我检查的尺寸不正确。
为了正确检查大小,我现在使用获取字节大小与字符串长度的对比
var s = JSON.stringify(objToSave);
encodeURI(s).split(/%(?:u[0-9A-F]{2})?[0-9A-F]{2}|./).length-1)
这给了我 10765 的大小,我现在使用@wOxxOm 在
上的回答进一步分解
好吧,你得到 QUOTA_BYTES_PER_ITEM 的唯一合乎逻辑的原因是你试图使用超过 8k 标记的字符串...
但是我觉得这里有两件事可能出了问题..
- 仔细检查 key:value 对
- "可变字节长度" 由于您正在对字符串进行编码,因此您的字符串可能充满 2 字节数据的可能性很小 [如果字符代码大于256 或 (<= 0xFF) 那么字节大小是 2,你的字符串可能是 3452 但充满了 2 个字节然后它会超过 8k 标记,它可能只是那个盲点。
我在尝试将对象保存到存储时遇到 QUOTA_BYTES_PER_ITEM 超过配额错误,但我对大小的预检查通过了。我确定我在这里犯了一些基本错误(这是检查对象大小的有效方法吗?)。我已经用LZString压缩了我要保存的项目,但不管怎样,它似乎比配额小很多。
var objToSave = {};
objToSave[myKey] = compressedObj;
console.log("Size of obj is: " + JSON.stringify(objToSave).length); //prints 3452
console.log(chrome.storage.sync.QUOTA_BYTES_PER_ITEM); //prints 8192
if (JSON.stringify(objToSave).length >= (chrome.storage.sync.QUOTA_BYTES_PER_ITEM)) { // this never triggers
alert('objToSave is too large!');
return;
}
chrome.storage.sync.set(objToSave, function() {
if (chrome.runtime.lastError) { // this error gets triggered.
console.log("Error: " + chrome.runtime.lastError.message); // this error gets triggered.
return customAlert("Error!: " + chrome.runtime.lastError.message);
}
});
谢谢@nishant 和@wOxxOm - 这正是错误所在。我检查的尺寸不正确。
为了正确检查大小,我现在使用获取字节大小与字符串长度的对比
var s = JSON.stringify(objToSave);
encodeURI(s).split(/%(?:u[0-9A-F]{2})?[0-9A-F]{2}|./).length-1)
这给了我 10765 的大小,我现在使用@wOxxOm 在
好吧,你得到 QUOTA_BYTES_PER_ITEM 的唯一合乎逻辑的原因是你试图使用超过 8k 标记的字符串...
但是我觉得这里有两件事可能出了问题..
- 仔细检查 key:value 对
- "可变字节长度" 由于您正在对字符串进行编码,因此您的字符串可能充满 2 字节数据的可能性很小 [如果字符代码大于256 或 (<= 0xFF) 那么字节大小是 2,你的字符串可能是 3452 但充满了 2 个字节然后它会超过 8k 标记,它可能只是那个盲点。