ChromeExtension:将新数据添加到现有散列而不覆盖保存的数据chrome.storage.sync set/get API的

问题描述:

实现chrome.storage.sync set/get API,是否有方法将新数据添加到现有散列/数组没有覆盖保存的数据?ChromeExtension:将新数据添加到现有散列而不覆盖保存的数据chrome.storage.sync set/get API的

默认情况下,如果将新条目写入定义的键,则现有的键/值对将被覆盖。所以我开发了一种解决方案。该函数从给定网页上的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。

+0

我很高兴你能找到一个解决自己你的问题。通过你的代码看我发现了几件事: – Makyen

+0

你把'query'当作一个字符串和一个数组。 [docs](https://developer.chrome.com/extensions/tabs#property-callback-result)清楚地表明它将是一个结果数组。你应该一致地把它当作一个数组。你使用'=='和'!='来使用'==='和'!=='更合适(后者应该是'Array.isArray(query)'并且应该有'你可以使用'addEventListener()',而不是'onclick'。'on *'属性是一个'onclick'处理器,当存储器中的数据可能无效时,不好的方式添加事件监听器 – Makyen

+0

感谢您评论Makyen,我来自Ruby,其中obj!=''或==是我们如何检查是否不等于空白字符串/等于我的研究表明我可以使用这些运算符在JS中也是如此,我将试验..关于用(Array.isArray(query)else {do something})替换!=不会检查查询是否是数组对象?但不是查询参数总是一个字符串(代码:“window.getSelection()。toString();”)这种情况是为了停止在存储阵列对象中结束的空白条目(如果没有页面textSelection点击图标)我将改变onclick;) TAR –

解决:我张贴这种由Makyen更好地说明上述评论& myself.This代码只是扩展背景脚本的一部分,任何人有意在其全部查看文件请弹出看过来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; 
     }); 
    } 
});