Adr*_*ood 5 javascript greasemonkey tampermonkey
我正在使用 setInterval(在 3 个 Tampermonkey 脚本内)每隔几秒检查三个不同的公共网站,这样当特定文本出现时我就可以收到警报。这些警报适用于自由职业机会,可能会在几秒钟内到期,所以我必须快点。
一切正常,除了当我在不同的选项卡或应用程序中工作时,大约 6 分钟后,setInterval 开始每分钟“触发”一次后台选项卡,而不是每隔几秒一次。
有什么建议如何解决这个问题吗?是否可以以某种方式使用 Date.now() ?请注意,我是一个完全的初学者,愿意学习,但需要使事情尽可能简单。
我尝试使用 window.location.reload() 每 3 分钟重新加载一次页面,但这不起作用。我想我可以创建一个脚本来每隔几分钟激活并聚焦该选项卡,但这会中断我正在处理的任何事情。我使用以下准系统脚本针对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);
Run Code Online (Sandbox Code Playgroud)
几分钟后,即使在窗口重新加载之后,i 每分钟仅增加一次。
我看过这个问题
它提到了“工人”,但是这些可以在我不拥有的公共网站上的 tampermonkey 中使用吗?它还提供了一个链接,建议一种播放几乎听不见的音频文件的解决方法 - 但我不知道在我的 tampermonkey 脚本中播放该文件是否有效?
我看到这里有很多解决方法,但我不确定是否可以使用其中任何一个。
例如,可以在篡改猴中使用 MutationObserver 来检测公共网站的更改吗?即使可以,大概我每次需要检查时都必须重新加载网页?目前我正在使用 XMLHttpRequest 而不是加载网页(速度更快并且使用更少的 CPU)。
有趣的是,上面的链接似乎表明 setInterval 和 SetTimeout 是专门针对限制的,我想知道这是否意味着我可以使用其他函数来代替。
我也见过这个,但我想我只能将其用于我拥有的网站?
我可以想到几个选择。
不要使用三个脚本,而是使用单个脚本,并在每个站点上运行该单个脚本(使用// @match *://*/*)。然后,使用该单个脚本设置间隔。每当间隔回调运行时,请使用 Tampermonkey 的GM_setValue和GM_getValue进行跨域存储来协调执行 - 回调将首先检查getValue上次检查是否超过 3 分钟前。如果是这样,它会调用setValue当前日期并执行检查。这样,即使脚本在 100 个不同的选项卡上运行(一些在活动选项卡中,一些在后台选项卡中),它仍然会每隔几分钟运行一次检查。
要执行检查,请使用 Tampermonkey 的 GM_xmlHttpRequest 来跨越同源限制;向这三个站点发出请求,并使用 DOMParser 将它们解析为文档,以便您可以以编程方式搜索它们以查找您要查找的元素。
从后端应用程序而不是从浏览器执行检查 - 例如,使用 Node 和 Puppeteer,它们不会出现限制问题。要与您沟通结果,您可以使用本地网络服务器的用户脚本或 Websocket,或者可以将网络服务器集成到Electron应用程序中。这是我更喜欢的方法,我认为它是最稳健的。
使用工人,这对一些人有用
| 归档时间: |
|
| 查看次数: |
1172 次 |
| 最近记录: |