【问题标题】:Web workers to make setInterval work as normal网络工作者让 setInterval 正常工作
【发布时间】:2016-07-14 12:13:02
【问题描述】:

我正在尝试仅使用 javascript 控制台创建一个自动化程序。我需要使用 setInterval 为我的程序创建一个循环。 代码的相关部分是这样的:

refreshIntervalId=setInterval(tick,500);

因此“tick”函数将每 500 毫秒调用一次。

但问题是,只要浏览器选项卡处于非活动状态,即我将其最小化以执行其他操作,setInterval 就会停止工作。当我再次打开浏览器时,它突然重复了很多次以“补偿”未执行该功能的时间。这不是我所期望的。

我听说网络工作者可以解决这个问题。我只需要一个(或两个)单一的代码行来通过网络工作者工作,但由于我是 IT 的业余爱好者,我无法理解所有这些。我只能通过 JS 控制台访问浏览器,并且无法访问 HTML 及其脚本。

我的主要目标是让它循环并正常中断(setInterval 和 clearInterval),同时浏览器仍可处于非活动模式。

我现在该怎么办?感谢您的阅读,希望有人能帮我解决它!

【问题讨论】:

  • 为什么您认为在该选项卡未打开时运行您的代码是必要或合适的?
  • 看看能不能帮到你stackoverflow.com/questions/5927284/…
  • “我只能通过 JS 控制台访问浏览器,无法访问 HTML 及其脚本。” 这没有多大意义。
  • 嗨 Crowder 我必须制作一个自动程序来点击网站上的按钮,即使我在输入文档或做其他事情时也是如此。我所说的“通过JS控制台访问浏览器”的意思是我只能在Javascript控制台中编写程序,我无法访问网站HTML及其脚本,所以Web工作者有点难。
  • Gallani:谢谢,我使用了 Hack Timer,在页面自动刷新之前它很棒。我不知道为什么,但它会停止所有代码。

标签: javascript setinterval web-worker console.log clearinterval


【解决方案1】:

好的,这可能有点晚了,但我希望无论如何这会有一些用处。

将此代码放入您的主 JavaScript:

let intervalWorker = new Worker('worker.js');
intervalWorker.onmessage = /* Your function here */;

...和 ​​this 可能是新文件 'worker.js' 中的代码示例:

setInterval(() => {
    postMessage();
}, 500);

worker 将每 500 毫秒向您的主线程发布一条空消息。发生这种情况时,您的主线程将在您的工作人员上调用“onmessage”函数。因此,只需将每 500 毫秒需要发生的任何功能分配给该属性即可。

注意:您需要在服务器上运行此程序,以便 JS 加载工作文件 - 否则会因为“安全”原因而报错。

【讨论】:

  • 如何更精细地控制时间间隔?意思是当我想启动它并在我想清除它时清除它。我对Workers 不熟悉,相关文档很少
  • setTimeout 和 setInterval 在 Window 范围和工作范围内的工作方式相同;我建议您只需阅读有关 setInterval 的 MDN 文档。您可以通过调用 setInterval 来启动间隔,如果您像let id = setInterval(...) 一样保护它的返回值,那么您可以稍后使用clearInterval(id) 再次清除它。如果您想将这些操作传达给作品,则需要使用 postMessage。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 2021-10-24
  • 2013-10-10
  • 2013-05-18
  • 2014-07-20
  • 1970-01-01
相关资源
最近更新 更多