Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

saving and retrieving from chrome.storage.sync

I am trying to save a data object in chrome sync storage and then retrieve it, however the get() function always returns an empty object. The code I am using is,

function storeUserPrefs() {     var key='myKey', testPrefs = {'val': 10};         chrome.storage.sync.set({key: testPrefs}, function() {console.log('Saved', key, testPrefs);}); }  function getUserPrefs() {     chrome.storage.sync.get('myKey', function (obj) {         console.log('myKey', obj);     }); } 

Could someone please tell me what I am doing wrong here?

like image 284
source.rar Avatar asked Jan 25 '13 22:01

source.rar


2 Answers

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}" } 
like image 127
Sudarshan Avatar answered Sep 22 '22 16:09

Sudarshan


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] }) 
like image 29
bde-maze Avatar answered Sep 22 '22 16:09

bde-maze