ChromeExtension:将新数据添加到现有哈希,而不会覆盖已保存的数据chrome.storage.sync set / get API' s

时间:2017-07-30 05:59:04

标签: javascript google-chrome-extension synchronization storage

实现chrome.storage.sync set / get API,有没有办法将新数据添加到现有的哈希/数组而不会覆盖保存的数据?

2 个答案:

答案 0 :(得分:0)

默认情况下,如果将新条目写入已定义的键,则将覆盖现有的键/值对。所以我开发了一种解决方案作为解决方案。该函数从给定网页上的SelectedText中检索字符串。将它们符合chrome存储阵列,创建了一个在弹出窗口中突出显示的历史记录。

让我们跳进逻辑:

// Selected History Functionality
var history = [];
chrome.tabs.executeScript(null, {
    code: "window.getSelection().toString();"
}, function(query) {
    chrome.storage.sync.get('list', function(data) {
        if(typeof data.list == 'undefined' ) {
            chrome.storage.sync.set({'list': query}, function() {
                console.log("link key and value created");
            });
        } else {
            if(query != '') {
                var persistentData = data.list;
                history.push(persistentData, query);
                chrome.storage.sync.set({'list': history}, function() {
                    console.log("fetched and appended new data successfully");
                });
            }       
        }
    });
    document.getElementById('getHistory').onclick = function() {
        chrome.storage.sync.get('list', function(historyEntries) {
            document.getElementById('historyContainer').innerHTML = historyEntries.list;
        });
    }   
});

我正在检索存储中存储的最新信息。将它推入一个超出函数范围的空数组以及新条目&然后覆盖键/值对,如果它不存在(第一个条目)我们创建它。然后将数据传递给弹出窗口中的空div。

答案 1 :(得分:0)

解决:我发布此信息是为了更好地说明Makyen&我自己。这段代码只是扩展后台脚本的一部分,对于任何有兴趣查看整个文件的人,请点击此处https://twitter.com/WEBrip/status/892386915915243523

历史逻辑:

// Selected History Functionality
chrome.tabs.executeScript(null, {
    code: "window.getSelection().toString();"
}, function(query) {
    chrome.storage.sync.get('list', function(data) {
        if(typeof data.list == 'undefined' ) {
            chrome.storage.sync.set({'list': query}, function() {
                console.log("link key and value created");
            });
        } else {
            if(query[0] !== '') {
                data.list.push(query[0]);
                chrome.storage.sync.set({'list': data.list}, function() {
                    console.log("fetched and appended new data successfully");
                });
            }       
        }
    });
    getHistory.onclick = function() {
        chrome.storage.sync.get('list', function(historyEntries) {
            document.getElementById('historyContainer').innerHTML = historyEntries.list;
        });
    }   
});