运行 每 n 小时在非活动浏览器选项卡上显示一个 Javascript 代码
Run a Javascript code on an inactive browser tab every n hours
我需要每 24 小时在网页上 运行 一段 Javascript 代码。我将该代码包装在 setInterval 中。 That works, when the tab is active.但是,当我在 24 小时后回来时,我看不到它在工作。根据我在互联网上的研究,浏览器似乎取消了非活动选项卡上的脚本的优先级。我看到了基于 Web Workers 的解决方案。这个问题有更简单的替代解决方案吗?
终于,我找到了解决问题的方法。我使用“visibilityState”事件来检测何时单击了非活动选项卡,我还有一个 window 范围变量,用于记录上次执行脚本的时间 (window.globalVar.lastProfileTime)。使用两者,我介绍了这个逻辑:
const lastProfileTime = window.globalVar.lastProfileTime;
if((document.visibilityState === 'visible') &&
((typeof(lastProfileTime) === 'undefined') ||
((currentTime - lastProfileTime) > 86400000))) {
// do something
}
这样,每当用户将浏览器选项卡置于视图中时,visibilityState 事件监听器就会触发,并根据 24 小时检查执行我需要的代码段。这样就不需要定时器了。
我需要每 24 小时在网页上 运行 一段 Javascript 代码。我将该代码包装在 setInterval 中。 That works, when the tab is active.但是,当我在 24 小时后回来时,我看不到它在工作。根据我在互联网上的研究,浏览器似乎取消了非活动选项卡上的脚本的优先级。我看到了基于 Web Workers 的解决方案。这个问题有更简单的替代解决方案吗?
终于,我找到了解决问题的方法。我使用“visibilityState”事件来检测何时单击了非活动选项卡,我还有一个 window 范围变量,用于记录上次执行脚本的时间 (window.globalVar.lastProfileTime)。使用两者,我介绍了这个逻辑:
const lastProfileTime = window.globalVar.lastProfileTime;
if((document.visibilityState === 'visible') &&
((typeof(lastProfileTime) === 'undefined') ||
((currentTime - lastProfileTime) > 86400000))) {
// do something
}
这样,每当用户将浏览器选项卡置于视图中时,visibilityState 事件监听器就会触发,并根据 24 小时检查执行我需要的代码段。这样就不需要定时器了。