首页 > 解决方案 > 如何在 chrome 扩展中持续检查日期是否已通过?

问题描述

我正在构建一个 Chrome 扩展程序,我让用户选择他们通常关闭 PC 的时间。
如果这个时间已经过去,我希望将一个值重置为 0 并创建一个新的日期。

我做了什么

我创建了一个函数,该函数采用 Dare ISO 字符串的参数,然后将其转换为日期对象。在该函数中,我正在比较现在和结束时间,如果结束时间小于或等于现在,则表示时间已经过去,应该重置该值。但它什么也没做。我在我的方法和我的方法中
调用函数,所以我总是有正确的时间来使用。但这似乎并没有做到。 这是代码:Background.jsstorage.sync.getstorage.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

我觉得问题是,它只检查一次,但它需要一致地检查时间。

标签: javascriptgoogle-chrome-extension

解决方案


解决该问题的粗略方法如下:

背景.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

本质上,您必须以给定的时间间隔检查重置计时器的值,以确保该计时器是否已过期。


推荐阅读