首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使setInterval在后台选项卡中正确工作

如何使setInterval在后台选项卡中正确工作
EN

Stack Overflow用户
提问于 2022-11-05 15:37:01
回答 1查看 55关注 0票数 4

我每隔几秒钟就会使用setInterval (在3个Tamper猴子脚本中)检查三个不同的公共网站,这样我就可以在出现特定文本时得到通知。这些警报是为自由职业者提供的,可以在几秒钟内到期,所以我必须尽快。

所有的操作都是正确的,除非我在不同的选项卡或应用程序中工作,然后大约6分钟后,setInterval开始每分钟为后台选项卡“触发”一次,而不是每隔几秒钟一次。

有什么建议怎么解决吗?是否可以以某种方式使用Date.now()?请注意,我是一个完全的初学者,愿意学习,但需要保持尽可能简单。

我尝试过每3分钟使用window.location.reload()重新加载页面,但这是行不通的。我想我可以每隔几分钟创建一个脚本来激活和聚焦选项卡,但是这会中断我正在做的任何事情。我用下面的基本脚本对https://www.google.co.uk/进行了测试,以防脚本中的其他东西导致问题,但同样发生了:

代码语言:javascript
代码运行次数:0
运行
复制
var i = 0;
setInterval(function() {
    console.log("log: i:" + i);
    i = i+1;
    if(i==15) {
        i = 0;
        window.location.reload();
        console.log("reloaded window");
    }

}, 10000);

几分钟后,我每分钟只增加一次,甚至在窗口重新加载之后也是如此。

我看过这个问题

它提到了“工人”,但这些东西能在我不拥有的公共网站上被篡改吗?它还提供了一个链接,它建议播放一个几乎听不见的音频文件的解决方案--但我不知道在我的篡改脚本中播放该音频文件是否有效?

我看到这里有很多解决办法,但我不确定是否可以使用其中的任何一个。

例如,MutationObserver是否可以在篡改猴子中用于检测公共网站中的变化?即使它可以,想必每次我需要checK时,我都要重新加载网页?目前,我使用的是XMLHttpRequest,而不是加载网页(更快,使用较少的CPU)。

有趣的是,上面的链接似乎表明setInterval和SetTimeout是专门用于节流的,我想知道这是否意味着我可以使用其他函数。

我也见过,但我想我只能在我自己的网站上使用它?

EN

回答 1

Stack Overflow用户

发布于 2022-11-05 15:52:04

我可以想出几个选择。

  • 与其使用三个脚本,不如使用一个脚本,并在每个站点上运行该脚本(使用// @match *://*/*)。然后,使用单个脚本设置间隔。每当间隔回调运行时,就使用Tampermonkey的GM_setValueGM_getValue作为跨域存储来协调执行--回调将首先向getValue检查上一次检查是否超过3分钟前。如果是这样的话,它使用当前日期调用setValue并执行检查。这样,即使脚本在100个不同的选项卡上运行(一些在活动选项卡上,一些在后台选项卡中),它仍然每隔几分钟运行一次检查。 要执行检查,可以使用Tampermonkey的GM_xmlHttpRequest来跨越相同的来源限制;向这三个站点发出请求,并使用DOMParser将它们解析为文档,这样您就可以通过编程搜索它们以查找要查找的元素。
  • 从后端应用程序中执行检查,而不是从浏览器中执行--例如,使用Node和Puppeteer,这样就不会有节流问题。为了与您交流结果,您可以使用userscript或websocket与您的本地you服务器,或者您可以将webserver集成到一个电子应用程序中。这是我更喜欢的方法,我认为这是最健壮的。
  • 使用员工,哪个为一些人工作过
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74329132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档