监控chrome.storage油门限制

时间:2014-10-14 23:25:30

标签: google-chrome-extension google-chrome-storage

我在扩展程序中使用chrome.storage,并希望避免因同步或本地存储超过documented throttles之一而触发运行时错误。 (例如QUOTA_BYTESQUOTA_BYTES_PER_ITEM

我的第一选择是在生成运行时错误之前拦截这些错误;或者我可以跟踪扩展端的使用情况,并尽量避免触发它们。

这感觉就像某个人必须解决的问题,但我似乎无法找到任何解决方案 - 任何建议都值得赞赏。

1 个答案:

答案 0 :(得分:0)

以下是我要使用的解决方案的示例(使用Angular,因此这里有promises),虽然必须正则表达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;