【问题标题】:Chrome Extension: Check if background script is runningChrome 扩展:检查后台脚本是否正在运行
【发布时间】:2014-07-18 23:45:35
【问题描述】:

我有一个后台脚本,它使用 setInterval 命令定期执行网络请求。

我想知道后台脚本是否可以检测操作系统是否进入睡眠或待机状态,以便我可以调整恢复后台脚本时显示的计时器。我了解 setInterval 计时器在睡眠期间暂停基于此答案:What happens to setTimeout when the computer goes to sleep?

代码示例是 background.js

    set_start_time();
    search_set_int = setInterval(function() {

    foo();

    // Set the Auto Search Start time for the next run 
    set_start_time();
}, frequency); // Set interval function


 var total_time_left_sec = (frequency/1000) - (current_time_unix - start_time_unix)

谢谢

【问题讨论】:

  • 对于您的情况,也许好的解决方案是将间隔减少到少量(如 1000 毫秒),并在剩余时间的情况下向后台页面发送频繁更新。例如。 // do job every 60 seconds var remainedTime = 60; setInterval(function() { if (--remainedTime <= 0) { foo(); remainedTime = 60; } chrome.extension.sendMessage({remainedTime: remainedTime}); }, 1000);
  • 感谢您的评论。我正在使用这个解决方案,因为它很简单,我认为 Zig Mandel 关于使用 setInterval tick 计算确切经过时间的观点是一个问题,尽管我没有看到它发生。

标签: javascript google-chrome-extension


【解决方案1】:

保留一个带有最后一次间隔运行的时间戳的局部变量。 在正常(无睡眠)执行时,时间戳将大约是现在期间,但在睡眠时它会更旧,所以你知道你是从睡眠中来的。 也不要依赖间隔作为计算经过时间的“刻度” 而是记住开始时间戳并从现在减去()

【讨论】:

  • 感谢您的想法。计时器每秒更新一次,因为它只是一个时钟。 1.我需要存储每秒钟运行的最后一个时间戳 2.检索最后一个时间戳并在恢复时计算现在和最后一个时间戳之间的延迟,并根据“延迟”调整计时器
  • 是的。更复杂的是,当您检测到睡眠时,请调整您的时间间隔,以便它在经期变化时发生在正确的时刻
猜你喜欢
  • 2016-09-09
  • 1970-01-01
  • 2018-04-11
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2019-03-10
  • 2010-10-21
相关资源
最近更新 更多