2017-03-04 147 views
0

如果我做这样的事情在我的浏览器扩展程序,它工作正常:如何在Chrome本地存储中使用动态密钥获取并设置?

chrome.storage.local.set({"Foo1": dataValue}); 

这是罚款:

chrome.storage.local.get("Foo1", callback); 

但是,当我试图抽象这些信息的功能,这样我可以使用不同的针对不同情况的键名:

function saveLocalData(dataKey, dataValue){ 
    chrome.storage.local.set({dataKey: dataValue}); 
} 
saveLocalData("Foo1", "hello foo"); 

...然后这样的:

function getLocalData(dataKey, callback){ 
    chrome.storage.local.get(dataKey, callback); 
} 
getLocalData(dataKey, myCallbackFunction); 

...无论是保存得到看似成功,但在检索我只是似乎有一个空的对象。我已经在Chrome开发工具中介绍了我的代码,并检查了返回的[Object] - 它不是null - 但它似乎是空的和无用的,并且如果它将我的数据放在肠的某个地方,似乎找不到它。

我甚至想这一点,但没有更好的效果:

function getLocalData(dataKey, callback){ 
    dataKey = "\"" + dataKey + "\""; 
    chrome.storage.local.get(dataKey, callback); 
} 

function saveLocalData(dataKey, dataValue){ 
    dataKey = "\"" + dataKey + "\""; 
    chrome.storage.local.set({dataKey: dataValue}); 
} 

必须有某种方式来抽象的本地存储的getter和setter成一个函数,这样我可以在一个键名和值传递(保存),然后稍后通过传入正确的密钥名称来检索所需的值。饼干以这种方式工作,但本地存储有某种我不理解的巫术。我只使用getLocalData()的回调函数,因为我不需要setter中的回调函数。我的回调正在工作 - 回调函数被输入,我看起来似乎是空的[对象] - 它不只是空。

请帮忙,并提前致谢。

回答

1

变量不能用作密钥而不使用计算密钥,在ES6中是新的。

console.log({ [ "key" + 1 ]: "value" + 1 })

使用chrome.storage:

chrome.storage.local.set({ [ "key" + 1 ]: "value" + 1 }) 

另外,如果你是包装回调函数,你应该使用promises也许还async/await

+0

有道理,丹尼尔,谢谢。虽然这似乎是一个无意义的限制,迫使尴尬的解决方法。 – HerrimanCoder

相关问题