Ich habe eine Ergänzung zu Pumbaa80s Antwort , die für jemanden nützlich sein könnte, der sich für alte IEs entwickelt.
Ja, alle gängigen Browser implementieren Timeout-IDs als aufeinanderfolgende Ganzzahlen (was in der Spezifikation nicht erforderlich ist ). Obwohl die Startnummer von Browser zu Browser unterschiedlich ist. Es scheint, dass Opera, Safari, Chrome und IE> 8 Timeout-IDs von 1, Gecko-basierte Browser von 2 und IE <= 8 von einer Zufallszahl aus starten, die bei der Aktualisierung von Registerkarten auf magische Weise gespeichert wird. Sie können es selbst entdecken .
Alles, was bedeutet, dass der while (lastTimeoutId--)
Zyklus in IE <= 8 mehr als 8 -stellig ausgeführt werden kann und die Meldung " Ein Skript auf dieser Seite bewirkt, dass Internet Explorer langsam ausgeführt wird " angezeigt wird. Wenn Sie also nicht alle Timeout- IDs speichern können oder window.setTimeout nicht überschreiben möchten , können Sie die erste Timeout-ID auf einer Seite speichern und Timeouts bis dahin löschen .
Führen Sie den Code beim frühen Laden der Seite aus:
var clearAllTimeouts = (function () {
var noop = function () {},
firstId = window.setTimeout(noop, 0);
return function () {
var lastId = window.setTimeout(noop, 0);
console.log('Removing', lastId - firstId, 'timeout handlers');
while (firstId != lastId)
window.clearTimeout(++firstId);
};
});
Und löschen Sie dann alle ausstehenden Zeitüberschreitungen, die wahrscheinlich so oft durch Fremdcode festgelegt wurden, wie Sie möchten