saving and retrieving from chrome.storage.sync
The problem is with chrome.storage.sync.set({key: testPrefs}
Your data is stored as
{
key: "{"val":10}"
}
So, your code chrome.storage.sync.get('myKey')
return undefined\empty object.
Solution I
Use string "key"
as your key
chrome.storage.sync.get("key", function (obj) {
console.log(obj);
});
or
Solution II
Set data through "myKey"
Key.
chrome.storage.sync.set({"myKey": testPrefs})
P.S : Don't forget chrome.storage.sync
is permanent storage API, Use chrome.storage.sync.clear before any further testing to see changes
References
- Storage API
EDIT 1
Use this code to set variable value in Chrome.storage
function storeUserPrefs() {
var key = "myKey",
testPrefs = JSON.stringify({
'val': 10
});
var jsonfile = {};
jsonfile[key] = testPrefs;
chrome.storage.sync.set(jsonfile, function () {
console.log('Saved', key, testPrefs);
});
}
It generates following Output
Object{
myKey: "{"val":10}"
}
A more fancy way to do it, and it handles errors as well:
const getStorageData = key =>
new Promise((resolve, reject) =>
chrome.storage.sync.get(key, result =>
chrome.runtime.lastError
? reject(Error(chrome.runtime.lastError.message))
: resolve(result)
)
)
const { data } = await getStorageData('data')
const setStorageData = data =>
new Promise((resolve, reject) =>
chrome.storage.sync.set(data, () =>
chrome.runtime.lastError
? reject(Error(chrome.runtime.lastError.message))
: resolve()
)
)
await setStorageData({ data: [someData] })
function storeUserPrefs() {
var key='myKey', testPrefs = {'val': 10};
chrome.storage.sync.set({[key]: testPrefs}, function() {
console.log('Saved', key, testPrefs);
});
}
You could just force to evaluate the variable key using [key] when saving. That way is easy to set your keys dynamically. Hope that helps.
As chrome.storage.sync can storage JS objects, you can just do this:
var save = {};
save["myKey"] = testPrefs;
chrome.storage.sync.set(save, function() {
console.log('Settings saved');
});