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。
答
解决:我张贴这种由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;
});
}
});
我很高兴你能找到一个解决自己你的问题。通过你的代码看我发现了几件事: – Makyen
你把'query'当作一个字符串和一个数组。 [docs](https://developer.chrome.com/extensions/tabs#property-callback-result)清楚地表明它将是一个结果数组。你应该一致地把它当作一个数组。你使用'=='和'!='来使用'==='和'!=='更合适(后者应该是'Array.isArray(query)'并且应该有'你可以使用'addEventListener()',而不是'onclick'。'on *'属性是一个'onclick'处理器,当存储器中的数据可能无效时,不好的方式添加事件监听器 – Makyen
感谢您评论Makyen,我来自Ruby,其中obj!=''或==是我们如何检查是否不等于空白字符串/等于我的研究表明我可以使用这些运算符在JS中也是如此,我将试验..关于用(Array.isArray(query)else {do something})替换!=不会检查查询是否是数组对象?但不是查询参数总是一个字符串(代码:“window.getSelection()。toString();”)这种情况是为了停止在存储阵列对象中结束的空白条目(如果没有页面textSelection点击图标)我将改变onclick;) TAR –