运行 storage.set 时未检查 runtime.lastError:超过 QUOTA_BYTES_PER_ITEM 配额限制

33

我在我的background.html页面中遇到了这个异常。我不知道这个异常的含义。有人能解释一下这个异常并告诉我如何解决吗。

异常的详细信息如下:

Unchecked runtime.lastError while running storage.set: QUOTA_BYTES_PER_ITEM quota exceeded

谢谢。


3
即使不查看文档,我猜想 "storage ... BYTES_PER_ITEM quota exceeded" 是指您尝试在单个键下存储过大的对象。 - Teepeemm
2
谢谢您的回复。我通过使用chrome.storage.local 5,242,880 QUOTA_BYTES解决了我的问题。这解决了我的问题。本地存储中可以存储的数据量的最大值(以每个值的JSON字符串化加上每个键的长度来衡量)。如果扩展程序具有无限存储权限,则将忽略此值。 - Java4you
2个回答

55

当使用chrome.storage.sync.set函数来设置单个项目的数据时,如果数据大于8192字节,则会出现此错误。因为chrome.storage.sync.set允许的最大值为8192 QUOTA_BYTES_PER_ITEM

使用chrome.storage.local.set函数来保存大数据,而不是使用chrome.storage.sync.set。
因为chrome.storage.local.set可以包含5242880:QUOTA_BYTES

请参阅https://developer.chrome.com/extensions/storage

另外,如果仍然想使用chrome.storage.sync.set函数,可以使用以下代码获取警报:

chrome.storage.sync.set(function() {  
   var error = chrome.runtime.lastError;  
   if (error) {  
      alert(error);  
   }  
});   

如果您在使用chrome.storage.local时遇到相同的警告,则:

原因:您尝试存储的数据大于允许的本地存储量,即5242880 QUOTA_BYTES。
解决方案:您可以在manifest.json文件中将权限设置为unlimitedStorage。

  "permissions": [   
    .....  
    "unlimitedStorage",  
    .....  
   ],

了解更多关于权限的信息
1) https://developer.chrome.com/extensions/storage#property-managed
2) https://developer.chrome.com/extensions/permission_warnings#nowarning


1
在清单文件中使用无限存储权限。请检查以下两个网址:https://developer.chrome.com/apps/declare_permissions 和 https://developer.chrome.com/extensions/permission_warnings#nowarning - Vishal Kumar
4
无限存储并不能解决问题。 - titusfx
@titusfx,你能给我发送代码权限、文件的截图吗?请标明你在哪里使用它。 - Vishal Kumar
1
使用chrome.storage.local.set代替chrome.storage.sync.set。 - Shiv Singh
2
@ShivSingh,嘿,我觉得你没有完整地阅读解决方案。请仔细阅读...它与你提到的是一样的。 - Vishal Kumar

4

正如wOxxOm在他的评论中所概述的那样,答案已经在chrome.storage文档中涵盖。

此外,实现错误处理和检查runtime.lastError总是一个好习惯。如果一切都很好,它将为未定义。如果有问题,它将是非空的,chrome.runtime.lastError.message将解释出错原因。

Chrome添加了检查chrome.runtime.lastError是否实际被检查(评估)。如果没有,它认为这是一个未处理的异常,并抛出此错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接