我正在开发一个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
的深层副本并不能解决这个问题。编辑2:我应该详细说明一下如何设置
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;
};
}
}
}
指令模板视图 (mySelect.html
):
<div>
<div ng-repeat="item in options track by $index"
ng-click="select(item)">
</div>
</div>
然后,这些属性可以进行双向绑定,如下所示:
<my-select selected="settings.soundClip.selected"
options="settings.soundClip.options">
</my-select >
chrome.runtime.lastError
没有定义,这一切都太奇怪了! - Easypeasy