我正在尝试从chrome.storage.local
读取变量,对其进行一些更改,将其保存回来,然后再将其读回。
问题出现在searchAndHighlight(...)
之后。在该函数内部,设置了局部变量nodesToClear
。这应该写入chrome.storage.local
,以便下次searchAndHighlight(...)
运行时重复使用。
注意:我正在使用chrome-promise,以避免老派回调。
守则
import chromep from 'chrome-promise';
var nodesToClear = [];
chromep.storage.local.get('nodesToClear').then(function(data) {
console.log('data.nodesToClear: ', data.nodesToClear); // Array of node objects
console.log('ntc before: ', nodesToClear);
if(Object.keys(data.nodesToClear[0]).length > 0) {
console.log('typeof data.nodeToClear: ', typeof data.nodesToClear);
nodesToClear = data.nodesToClear;
}
console.log('ntc after: ', nodesToClear);
}).then(function() {
return chromep.storage.local.get(['ss', 'em', 'mc'])
}).then(function (data) {
searchAndHighlight(data.ss, data.em, data.mc);
chrome.storage.local.remove(['ss', 'em', 'mc']);
}).then(function() {
console.log('ntc at end: ', nodesToClear);
if(nodesToClear.length > 0) {
chromep.storage.local.set({ nodesToClear: nodesToClear });
}
}).then(function() {
return chromep.storage.local.get('nodesToClear');
}).then(function(data) {
console.log('ntc at end end: ', data.nodesToClear);
});
输出
// data.nodesToClear: [{…}]
// ntc before: []
// ntc after: []
// nodesToClear: [span.myCssClass]
// ntc at end: [span.myCssClass]
// ntc at end end: [{…}]
问题
ntc at end: [span.myCssClass]
如何正确地声明本地数组nodesToClear
现在包含一个单独的Element节点(对象)。ntc at end end: [{…}]
。那不是意图。它应该读出之前保存的相同内容。为什么不正确设置和获取值?
下面是一段简化的代码,它演示了同样的问题。
import chromep from 'chrome-promise';
var span = document.createElement('span');
span.classList.add('myClass');
var tn = document.createTextNode('blabla');
span.appendChild(tn);
var testVariable = span;
chromep.storage.local.set({testVariable: testVariable}).then(function() {
console.log('testVariable: ', testVariable);
return chromep.storage.local.get('testVariable');
}).then(function(data) {
console.log('data.testVariable: ', data.testVariable);
});