JavaScript - 是否可以修改第三方脚本(外部托管)使用的 setInterval/setTimeout 的行为
JavaScript - Is it possible to modify the behaviour of setInterval/setTimeout used by third party scripts (externally hosted)
我有一个第三方工具,可以在CDN上托管他们的JavaScript,由于他们所做的大量更改,快速开发,我不想实现自定义版本脚本。他们的部分 JavaScript 执行一个 setInterval,计时器为 8 分钟。
我想知道是否可以访问 Timer 堆栈并将所有后续计时器事件的 8 分钟修改为 100 秒?
如果没有,建议的替代方法是使用我自己的自定义 js 重写/覆盖 setInterval 函数,并确保我的自定义 js 在所有其他 js 之前先加载,然后使用匹配的 if 条件修改超时,如果 8 分钟更改为 100 秒?我的假设是这样的:
window.setInterval = function(callback, timeout) {
//check timeout for 8 minutes
}
好吧
,我会不惜一切代价避免这种情况(除了尝试"为了好玩")。
这可能是结果(一个 setInterval,其中所有间隔>= 100 秒都替换为 100 秒)
// above the use of setInterval by third party code
(function (w, maxVal) {
var f = w.setInterval;
w.setIntervalOld = f;
w.setInterval = function () {
var a = arguments;
if(a.length >= 2 && (a[1] > maxVal)) {
a[1] = maxVal;
}
f.apply(w, a);
};
})(window, 100000);
我试图以最连贯的方式进行黑客攻击,window.setIntervalOld 可用于您自己的代码。告诉我它对你有什么作用。
您可以执行自调度 setTimeout 路由,而不是使用 setInterval:
function workload(callback) {
var timeout=5000; //default run time
if(Math.random()>0.5){ timeout=1000; } // special run time (50/50 in this demo)
setTimeout(workload, timeout);
//do normal workload:
console.log(callback, timeout);
} // end workload
// use any time for first run:
setTimeout(workload, 12345);
您还可以使用"静态属性"从外部调整计时器:
function workload(callback) {
setTimeout(workload, workload.timeout || 5000); //default to 0.2hz
//do normal workload:
console.log(callback, workload.timeout);
} // end workload
// use any time for first run:
setTimeout(workload, 2000);
workload.timeout=1000; // change to poll at 1hz;
请注意,我实际上并没有实现回调,如果没有 bind(),每次执行参数都将为空。 因为函数本身基本上是回调,所以你不需要回调。您可以轻松地将这些模式之一转换为工厂,在该工厂中,您可以为其传递工作负载函数、默认间隔、初始延迟和另一个条件评估器函数,以实现最大的灵活性。
相关文章:
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- Ember Data DS.Model's set函数不起作用
- node.js:setInterval()正在跳过调用
- setInterval和clearInterval javascript无法按需工作
- Don'我不明白为什么我的setInterval+jQuery;不起作用
- setInterval游戏循环的范围问题
- C#asp.net mvc Set CheckBoxFor已检查的具有Model Value的属性
- 为什么JavaScript可以'找不到给定的InnerHTML并返回Cannot set property
- JavaScript setInterval problems
- 如何在Javascript中延迟setInterval
- 无法在基于Cordova的应用程序中读取Set Cookie标头
- 如何执行相同的setInterval()
- SetInterval在javascript对象中表现怪异
- 从setInterval方法移动到带有sprite的requestAnimationFrame
- 如何在悬停时暂停setInterval
- 在不兼容的接收器上调用的方法Set.prototype.add未定义
- 可以't获取setInterval函数以使用javascript中的this.function_name调用另一
- 删除对象时终止setInterval
- 使用setInterval()函数进行图像闪烁
- set backgroundPosition and setInterval