javascript - 如何在 chrome 扩展中持续检查日期是否已通过?
问题描述
我正在构建一个 Chrome 扩展程序,我让用户选择他们通常关闭 PC 的时间。
如果这个时间已经过去,我希望将一个值重置为 0 并创建一个新的日期。
我做了什么
我创建了一个函数,该函数采用 Dare ISO 字符串的参数,然后将其转换为日期对象。在该函数中,我正在比较现在和结束时间,如果结束时间小于或等于现在,则表示时间已经过去,应该重置该值。但它什么也没做。我在我的方法和我的方法中
调用函数,所以我总是有正确的时间来使用。但这似乎并没有做到。
这是代码:Background.jsstorage.sync.get
storage.onChanged
chrome.storage.onChanged.addListener((changes, namespace) => {
if ("reset" in changes) {
const reset = changes.reset.newValue;
console.log(reset);
checkResetTimer(reset);
}
});
chrome.storage.sync.get(["reset", "amount"], (obj) => {
const reset = obj.reset;
console.log(reset);
checkResetTimer(reset);
});
function checkResetTimer(isoTime) {
const resetDate = new Date(isoTime);
const now = new Date();
if (resetDate <= now) {
chrome.storage.sync.set({ drank: 0 }, () => {
console.log("drank has been set.");
});
}
}
我从弹出窗口中获得的时间值,它是一个输入。
我现在不知所措。我不知道如何正确设置重置计时器。您可以在此存储库中查看我的整个代码:https ://github.com/Braweria/TakeAGulp
我觉得问题是,它只检查一次,但它需要一致地检查时间。
解决方案
解决该问题的粗略方法如下:
背景.js
// rest of your code
const resetInterval = setInterval(() => {
chrome.storage.sync.get(["reset", "amount"], (obj) => {
const reset = obj.reset;
const resetTime = new Date(reset);
const now = new Date();
if(resetTime < now) {
// past your reset time; reset the value here
// maybe clear the interval too to stop the checking
clearInterval(resetInterval);
}
});
}, 1000 * 60); // check every minute
本质上,您必须以给定的时间间隔检查重置计时器的值,以确保该计时器是否已过期。
推荐阅读
- pytorch - 我有两个数据集,但标签对齐方式不同。如何对齐标签?
- vue.js - 在电脑上屏蔽节目,但在我的手机上不显示。可能是什么问题?
- c# - 如何设计一个包装类来使用 C++ 应用程序以使用 C# DLL?
- r - pdf_search 包的 normalizePath(path.expand(path)、winslash、mustWork) 错误?
- python - 使用循环遍历 Facebook get_insights 的日期
- java - Gson 写入嵌套对象
- android - 如何更改启动意图 React Native
- python - 当我没有将任何字符串转换为浮点数时,为什么会说“不支持将字符串转换为浮点数”?
- sed - sed 在存在未识别字符的情况下不匹配模式
- javascript - 如何将 html 添加到另一个 html。尝试了一切但仍然无法正常工作