首页 > 解决方案 > 无法将对象传递到 chrome 本地存储

问题描述

我正在使用 chrome 本地存储开发我的扩展程序,我想清除本地缓存,所以我使用了chrome.storage.local.clear(). 现在我想向本地存储添加更多数据,chrome.storage.local.set()但它在传递对象时返回未定义,即使它在清除之前确实有效。

这有效

chrome.storage.local.set({key: 'value'})

chrome.storage.local.get(['key'], result => {
    console.log(result.key) // returns value
})

但这并不

const obj = {
    key: 'value'
}

chrome.storage.local.set(obj)

chrome.storage.local.get(['obj'], result => {
    console.log(result.obj) // returns undefined
})

我需要能够将对象传递给chrome.storage.local.set

标签: javascriptgoogle-chrome-extension

解决方案


设置对象时,键名设置为keyonly。但是您遇到了问题,因为您尝试访问obj不存在的密钥名称。您可以像这样访问键值:

const obj = { key: 'value'}

chrome.storage.local.set(obj);

chrome.storage.local.get(['key'], result => {
    console.log(result.key) // returns 'value'
})

欲了解更多信息:

用于将对象存储在chrome.storage

const name: {
   first: 'Bob',
   last: 'Smith'
}

chrome.storage.local.set({ key: name });

chrome.storage.local.get(['key'], result => {
   console.log(result.key) // returns { first: 'Bob', last: 'Smith' }
   console.log(result.key.first)
   console.log(result.key.last)
})

您还可以解构result对象以获取键,例如:

chrome.storage.local.get(['key'], ({key}) => {
   console.log(key) // returns { first: 'Bob', last: 'Smith' }
   console.log(key.first)
   console.log(key.last)
})

获取存储的全部内容

文档中所述:

要获取的单个键、要获取的键列表或指定默认值的字典(请参阅对象描述)。空列表或对象将返回空结果对象。传入 null 以获取存储的全部内容。

chrome.storage.local.get(null, function(items) {
   var allKeys = Object.keys(items);
   console.log(allKeys);
});

推荐阅读