Au lieu de simplement avoir un nombre de minuteries, voici une implémentation qui stocke tous les identificateurs de minuterie dans un tableau. Il n'affiche que les minuteries actives tandis que la réponse acceptée ne compte que les appels vers setTimeout
& 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));
Voici comment obtenir le nombre de minuteries actives sur la page:
timers.length;
Voici comment supprimer tous les minuteurs actifs :
for(var i = timers.length; i--;)
clearInterval(timers[i]);
Limitations connues:
- Vous ne pouvez passer une fonction (pas une chaîne) à
setTimeout
avec ce patch de singe.
- La fonction suppose
clearInterval
et clearTimeout
fait la même chose, ce qu'elle fait, mais cela pourrait changer à l'avenir.
activeTimers
de décrémenter quand ilclearTimeout
n'était pas appelé. C'est facilement accompli en remplaçant la deuxième ligne dewindow.setTimeout
par ceci:return window.originalSetTimeout(function() {func(); activeTimers--;},delay);