我每隔几秒钟就会使用setInterval (在3个Tamper猴子脚本中)检查三个不同的公共网站,这样我就可以在出现特定文本时得到通知。这些警报是为自由职业者提供的,可以在几秒钟内到期,所以我必须尽快。
所有的操作都是正确的,除非我在不同的选项卡或应用程序中工作,然后大约6分钟后,setInterval开始每分钟为后台选项卡“触发”一次,而不是每隔几秒钟一次。
有什么建议怎么解决吗?是否可以以某种方式使用Date.now()?请注意,我是一个完全的初学者,愿意学习,但需要保持尽可能简单。
我尝试过每3分钟使用window.location.reload()重新加载页面,但这是行不通的。我想我可以每隔几分钟创建一个脚本来激活和聚焦选项卡,但是这会中断我正在做的任何事情。我用下面的基本脚本对https://www.google.co.uk/进行了测试,以防脚本中的其他东西导致问题,但同样发生了:
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是专门用于节流的,我想知道这是否意味着我可以使用其他函数。
我也见过这,但我想我只能在我自己的网站上使用它?
发布于 2022-11-05 07:52:04
我可以想出几个选择。
// @match *://*/*
)。然后,使用单个脚本设置间隔。每当间隔回调运行时,就使用Tampermonkey的GM_setValue
和GM_getValue
作为跨域存储来协调执行--回调将首先向getValue
检查上一次检查是否超过3分钟前。如果是这样的话,它使用当前日期调用setValue
并执行检查。这样,即使脚本在100个不同的选项卡上运行(一些在活动选项卡上,一些在后台选项卡中),它仍然每隔几分钟运行一次检查。
要执行检查,可以使用Tampermonkey的GM_xmlHttpRequest来跨越相同的来源限制;向这三个站点发出请求,并使用DOMParser将它们解析为文档,这样您就可以通过编程搜索它们以查找要查找的元素。https://stackoverflow.com/questions/74329132
复制相似问题