Google chrome extension chrome.storage.sync.get始终返回默认值

Google chrome extension chrome.storage.sync.get始终返回默认值,google-chrome-extension,Google Chrome Extension,我正在开发一个chrome扩展,它要求我跟踪该扩展上次运行的日期。为此,我使用chrome.storage.sync,但是get调用总是返回我设置为默认值的值。下面是代码 chrome.storage.sync.get({theDate:{}}),函数(dateResult){ 让currentDate=新日期(); 让setDate=dateResult.theDate;//始终设置为{} if(Object.keys(setDate).length==0){//if日期以前从未设置过 set

我正在开发一个chrome扩展,它要求我跟踪该扩展上次运行的日期。为此,我使用chrome.storage.sync,但是get调用总是返回我设置为默认值的值。下面是代码

chrome.storage.sync.get({theDate:{}}),函数(dateResult){
让currentDate=新日期();
让setDate=dateResult.theDate;//始终设置为{}
if(Object.keys(setDate).length==0){//if日期以前从未设置过
setDate=当前日期;
}
如果(setDate.toLocaleDateString()!==currentDate.toLocaleDateString()){
//如果这一天与上次运行扩展时不同,请执行一些操作
}
chrome.storage.sync.set({theDate:currentDate},函数(){
日志(“当前日期集”);
});
});

Chrome extension storage API仅支持与JSON兼容的类型,如字符串、数字、布尔值以及由这些基本类型组成的数组/对象

Date
对象不可JSON'ifiable,因此无法存储。
您可以存储
Date.now()
,这是一个数字

chrome.storage.sync.get({theDate:Date.now()},({theDate})=>{
if(新日期(theDate).toLocaleDateString()!==新日期().toLocaleDateString()){
//如果这一天与上次运行扩展时不同,请执行一些操作
}
chrome.storage.sync.set({theDate:Date.now()});
});

在存储
日期对象之前,需要对其进行字符串化。使用
JSON.stringify
String
构造函数。或者,您可以将
Date
作为普通函数而不是构造函数调用,以获取字符串对象,而不是Unix时间戳;或者,更好的方法是使用
Date.now()
以毫秒为单位获取日期

我还必须注意,在第一个条件中,您检查从存储器中检索的
Date
对象是否有键,但它不应该有键,即使您可以存储原始
Date
对象。您可能误解了数据在存储器中的设置方式。基本上是
dateResult==={theDate:currentDate}
,和
dateResult.theDate===currentDate


编辑:包括wOxxOm关于完整性的建议。

感谢您澄清了chrome.storage中可以存储的内容。因为我只需要知道它是否是同一个日期,所以我存储了new date().toLocaleDateString(),而不是整个对象,这与date.now()的思想相同