gpt4 book ai didi

javascript - 对象属性在 chrome.storage.sync.set 后变为空

转载 作者:数据小太阳 更新时间:2023-10-29 04:52:24 25 4
gpt4 key购买 nike

我正在构建一个 chrome 扩展,遇到了一个我无法解决的错误。问题是单个对象属性在 chrome 的存储中变为 null

我正在通过以下方式对此进行测试:

console.log("pre-storage", settings);
var obj = {};
obj[storage_key] = settings;

chrome.storage.sync.set(obj, function() {
chrome.storage.sync.get(storage_key, function(data) {
console.log("post-storage", data[storage_key]);
});
});

这是输出:

pre-storage, Object {
...
soundClip: Object {
options: Array[5],
selected: Object {
label: "Soft2",
value: "snd/soft2.wav"
}
}
}

post-storage, Object {
...
soundClip: Object {
options: Array[5],
selected: null
}
}

直接存储 JSON.parse(JSON.stringify(obj)) 而不是 obj 似乎可以解决这个问题。任何人有什么想法可能会导致这种情况?感谢您的帮助!

编辑:对 obj 进行深度复制并不能解决问题。

Edit2:我应该详细说明如何设置 settings.soundClip。我正在使用 Angular (1.x) 并且我正在使用自定义选择指令。精简指令如下所示:

function mySelect() {
return {
restrict: "E",
templateUrl: "mySelect.html",
scope: {
options: "=",
selected: "="
},
link: function (scope) {
scope.select = function (item) {
scope.selected = item;
};
}
}
}

指令模板 View (mySelect.html):

<div>
<div ng-repeat="item in options track by $index"
ng-click="select(item)">
</div>
</div>

属性然后像这样双向绑定(bind):

<my-select selected="settings.soundClip.selected"
options="settings.soundClip.options">
</my-select >

最佳答案

由于调用 JSON.parse(JSON.stringify(obj)) 似乎可以解决问题,我猜测您在使用变量而不是字符串对设置对象进行编码时遇到了问题。查看答案here这可能会有所帮助。

关于javascript - 对象属性在 chrome.storage.sync.set 后变为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35047242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com