繁体   English   中英

Chrome.storage不会正确存储数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM