[英]Chrome.storage wont store Array correctly
我正在使用chrome扩展并且chrome.storage api有问题。 我想将一个数组保存到存储器中,存储数组,但不存储数组的值。 所以array [x]总是'null'。 代码如下所示:
var storage = chrome.storage.local;
bookmarks = new Array();
var newButton = document.createElement('input');
//... Button properys are getting set
bookmarks[bookmarks.length] = newButton; //tried it also with .push()
var obj = {};
obj['bookmarks'] = bookmarks;
storage.set(obj, function(){ console.log('bookmark saved'); });
重新启动扩展并通过以下方式获取存储后:
storage.get(null, function(result){
console.log('Storage: ', result);
});
日志看起来像这样:
Storage:
Object
bookmarks: Array[1]
0: null
length: 1
__proto__: Array[0]
__proto__: Object
有什么建议是错误的,为什么阵列没有正确存储?
谢谢!
要在Chrome.storage
存储对象,该对象必须是可序列化的。 您可以通过尝试JSON.stringify()
来测试对象是否可序列化。 如果您在控制台中尝试以下操作:
JSON.stringify(document.createElement('input'));
您将看到抛出错误 - TypeError: Converting circular structure to JSON
。 这意味着该对象无法序列化,因为它包含对self的引用。
看到DOM元素无法序列化,因此无法存储,解决方案是创建一个新对象,向其添加所需的按钮属性,然后存储它:
bookmarks = new Array();
var newButton = document.createElement('input');
//... Button properties are getting set
var data = {
prop: newButton.prop
};
bookmarks.push(data);
storage.set({ bookmarks: bookmarks });
newButton对象太复杂而无法存储。 相反,您应该存储原始值。 例如,如果您运行以下命令,则可以从storage.local中检索预期的{bookmarks:[{foo:"bar"}]}
。
var storage = chrome.storage.local;
bookmarks = new Array();
bookmarks[bookmarks.length] = {foo:"bar"};
var obj = {};
obj['bookmarks'] = bookmarks;
storage.set(obj, function(){ console.log('bookmark saved'); });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.