我在扩展中使用chrome.storage并希望避免由于超过同步或本地存储的记录限制之一而触发运行时错误。(像QUOTA_BYTES
,QUOTA_BYTES_PER_ITEM
)
我的第一选择是在生成运行时错误之前拦截这些错误;或者,我可以跟踪扩展端的使用情况并尽量避免触发它们。
这感觉像是一个必须有人解决的问题,但我似乎找不到任何解决方案 - 任何建议表示赞赏。
我在扩展中使用chrome.storage并希望避免由于超过同步或本地存储的记录限制之一而触发运行时错误。(像QUOTA_BYTES
,QUOTA_BYTES_PER_ITEM
)
我的第一选择是在生成运行时错误之前拦截这些错误;或者,我可以跟踪扩展端的使用情况并尽量避免触发它们。
这感觉像是一个必须有人解决的问题,但我似乎找不到任何解决方案 - 任何建议表示赞赏。
这是我要使用的解决方案的一个示例(使用 Angular,所以这里有承诺),尽管必须正则表达式的chrome.runtime.lastError
值是非常丑陋的 IMO:
var service = {
error: function(lastError) {
if((lastError) && (lastError.message)) {
var errorString = lastError.message;
if(/QUOTA_BYTES/.test(errorString)) {
return true;
} else if(/QUOTA_BYTES_PER_ITEM/.test(errorString)) {
return true;
} else if(/MAX_ITEMS/.test(errorString)) {
return true;
} else if(/MAX_WRITE_OPERATIONS_PER_HOUR/.test(errorString)) {
return true;
} else if(/MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE/.test(errorString)) {
return true;
}
return false;
} else {
return false;
}
},
write: function(key, value) {
var deferred = $q.defer();
var data = {};
data[key] = value;
chrome.storage.sync.set(data, function() {
if(service.error(chrome.runtime.lastError)) {
deferred.reject('Write operation failed: '
+ chrome.runtime.lastError.message);
} else {
deferred.resolve();
}
});
return deferred.promise;
}
};
return service;