【问题标题】:Run a Javascript code on an inactive browser tab every n hours每 n 小时在非活动浏览器选项卡上运行 Javascript 代码
【发布时间】:2021-07-31 12:26:38
【问题描述】:

我需要每 24 小时在网页上运行一段 Javascript 代码。我将该代码包装在 setInterval 中。它有效,当标签处于活动状态时。但是,当我 24 小时后回来时,我认为它不起作用。从我在互联网上的研究来看,非活动标签上的脚本似乎被浏览器降低了优先级。我看到了基于 Web Workers 的解决方案。这个问题有更简单的替代解决方案吗?

【问题讨论】:

  • 作业是否需要每 24 小时精确运行一次?
  • 是的,这是正确的。
  • 那个js是做什么的?真的必须从那个页面完成吗?浏览器扩展(在所有页面上加载)是否可以执行相同的操作?为了不限制超时,您需要保持文档处于活动状态,这意味着 CPU 必须工作,即使它每天 23 小时 59 天都白费。这对您的硬件和地球都不利。

标签: javascript timer setinterval web-worker


【解决方案1】:

最后,我有一个解决问题的方法。我使用“visibilityState”事件来检测何时单击非活动选项卡,我还有一个窗口范围变量,用于记录我的脚本上次执行的时间(window.globalVar.lastProfileTime)。使用两者,我介绍了这个逻辑:

const lastProfileTime = window.globalVar.lastProfileTime;
if((document.visibilityState === 'visible') &&
    ((typeof(lastProfileTime) === 'undefined') || 
    ((currentTime - lastProfileTime)  >  86400000))) { 
    // do something
}

这样,每当用户将浏览器选项卡带入视图时,visibilityState 事件监听器就会触发,并根据 24 小时检查执行我需要的代码。这样就不需要计时器了。

【讨论】:

    猜你喜欢
    • 2021-08-19
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    相关资源
    最近更新 更多