Anstatt nur eine Anzahl von Timern zu haben, ist hier eine Implementierung, die alle Timerids in einem Array speichert. Es werden nur aktive Timer angezeigt, während die akzeptierte Antwort nur Anrufe an setTimeout& zählt clearTimeout.
(function(w) {
var oldST = w.setTimeout;
var oldSI = w.setInterval;
var oldCI = w.clearInterval;
var timers = [];
w.timers = timers;
w.setTimeout = function(fn, delay) {
var id = oldST(function() {
fn && fn();
removeTimer(id);
}, delay);
timers.push(id);
return id;
};
w.setInterval = function(fn, delay) {
var id = oldSI(fn, delay);
timers.push(id);
return id;
};
w.clearInterval = function(id) {
oldCI(id);
removeTimer(id);
};
w.clearTimeout = w.clearInterval;
function removeTimer(id) {
var index = timers.indexOf(id);
if (index >= 0)
timers.splice(index, 1);
}
}(window));
So können Sie die Anzahl der aktiven Timer auf der Seite ermitteln:
timers.length;
So können Sie alle aktiven Timer entfernen :
for(var i = timers.length; i--;)
clearInterval(timers[i]);
Bekannte Einschränkungen:
setTimeoutMit diesem Affen-Patch können Sie nur eine Funktion (keine Zeichenfolge) übergeben .
- Die Funktion übernimmt
clearIntervalund clearTimeouttut dasselbe, was sie tut, aber es könnte sich in Zukunft ändern.
activeTimersdekrementieren, wennclearTimeoutes nicht aufgerufen wurde.window.setTimeoutDies kann leicht erreicht werden, indem die zweite Zeile durch folgende ersetzt wird :return window.originalSetTimeout(function() {func(); activeTimers--;},delay);