如何使用Tampermonkey绕过网页JavaScript倒计时计时器?
脚本失效原因
你在用户脚本匿名函数内声明的sec是仅在脚本私有作用域生效的局部变量,和页面全局上下文下的sec没有关联,因此无法修改页面的倒计时数值。
两个方案的可行性说明
两种方案都可实现需求,其中修改全局sec变量的方案1实现更简单、稳定性更高,优先推荐使用。
方案1(推荐):直接修改倒计时变量实现跳过
实现逻辑:直接将页面全局的sec变量设为小于0的值,主动调用一次倒计时函数即可触发下载表单渲染,无需等待计时。
完整油猴脚本代码如下:
// ==UserScript== // @name 跳过60秒下载倒计时 // @match *://替换为你实际使用的网站域名/* // @grant unsafeWindow // ==/UserScript== (function() { 'use strict'; // 等待页面逻辑加载完成后执行 window.addEventListener('load', () => { // 修改页面全局倒计时变量,直接满足结束判定条件 unsafeWindow.sec = -1; // 主动调用倒计时函数,触发下载按钮渲染 unsafeWindow.countDown(); // 清除原页面的定时器,避免重复执行 clearInterval(unsafeWindow.sInt); }); })();
使用说明:将@match后的域名替换为你实际要生效的站点地址即可。
方案2:修改setInterval间隔实现跳过
该方案需要在页面所有JS加载前就注入代码劫持setInterval方法,识别到countDown对应的定时器时将间隔改为0,实现成本更高,仅做参考:
// ==UserScript== // @name 劫持定时器跳过倒计时 // @match *://替换为你实际使用的网站域名/* // @run-at document-start // @grant none // ==/UserScript== const originalSetInterval = window.setInterval; window.setInterval = function(callback, delay, ...args) { if (callback.name === 'countDown') { delay = 0; } return originalSetInterval.apply(window, [callback, delay, ...args]); }
内容的提问来源于stack exchange,提问作者PJS1987
相关产品推荐
相关产品推荐

