我正在开发chrome扩展程序,它需要我跟踪扩展程序的最后运行日期。为此,我使用的是chrome.storage.sync,但是,get调用始终返回我设置为默认值的值。下面是代码。
chrome.storage.sync.get({theDate: {}}, function (dateResult) {
let currentDate = new Date();
let setDate = dateResult.theDate; // always set to {}
if (Object.keys(setDate).length === 0){ //if date has never been set before
setDate = currentDate;
}
if (setDate.toLocaleDateString() !== currentDate.toLocaleDateString()){
//do stuff if it is a different day than the last time extension was run
}
chrome.storage.sync.set({theDate: currentDate}, function () {
console.log("Current date set.");
});
});
答案 0 :(得分:2)
Chrome扩展存储API仅支持与JSON兼容的类型,例如字符串,数字,布尔值以及由这些原始类型组成的数组/对象。
Date
对象不可使用JSON,因此无法存储。
您可以存储Date.now()
,这是一个数字。
chrome.storage.sync.get({theDate: Date.now()}, ({theDate}) => {
if (new Date(theDate).toLocaleDateString() !== new Date().toLocaleDateString()) {
// do stuff if it is a different day than the last time extension was run
}
chrome.storage.sync.set({theDate: Date.now()});
});
答案 1 :(得分:1)
在存储Date
对象之前,需要对其进行字符串化。使用JSON.stringify
或String
构造函数。另外,您可以调用Date
作为常规函数,而不是构造函数来获取字符串对象,而不是Unix时间戳;或者,最好按照wOxxOm的建议,使用Date.now()
以毫秒为单位获取日期。 1
我还必须注意,在第一个条件中,您检查从存储中检索的Date
对象是否具有任何键,但是即使您可以存储原始Date
对象,也应该没有。您可能会误解如何在存储中设置数据。本质上是dateResult === {theDate: currentDate}
和dateResult.theDate === currentDate
。 2
编辑:包括wOxxOm的完整性建议。