Chrome 扩展:检查后台脚本是不是正在运行

Posted

技术标签:

【中文标题】Chrome 扩展:检查后台脚本是不是正在运行【英文标题】: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 计算确切经过时间的观点是一个问题,尽管我没有看到它发生。 【参考方案1】:

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

【讨论】:

感谢您的想法。计时器每秒更新一次,因为它只是一个时钟。 1.我需要存储每秒钟运行的最后一个时间戳 2.检索最后一个时间戳并在恢复时计算现在和最后一个时间戳之间的延迟,并根据“延迟”调整计时器 是的。更复杂的是,当您检测到睡眠时,请调整您的时间间隔,以便它在经期变化时发生在正确的时刻

以上是关于Chrome 扩展:检查后台脚本是不是正在运行的主要内容,如果未能解决你的问题,请参考以下文章

chrome 扩展的浏览器动作、后台脚本和内容脚本之间通信的上下文和方法?

JavaScript 回调/异步问题? Chrome 扩展程序的后台脚本在完成之前停止功能

Chrome 扩展程序 |如何在 CDN 的内容和后台脚本中包含库

Chrome 扩展后台脚本如何与网页服务工作者通信?

chrome浏览器中选项设置中有一个“关闭Google Chrome 浏览器后继续运行后台应用程序”,这个最好怎么设置?

如何根据后台运行的功能对 chrome 扩展的用户界面进行更改