Chrome扩展程序:chrome.storage.local未保存状态

时间:2018-04-17 13:39:11

标签: javascript google-chrome google-chrome-extension chrome-promise

我正在尝试从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);
});

0 个答案:

没有答案