Das ist, weil Sie genannte Funktionsausdrücke verwenden, die in IE falsch implementiert werden. Durch das Entfernen der Funktionsnamen wird das unmittelbare Problem behoben. Siehe kangax ist excellent article on this subject. Es gibt jedoch ein anderes Problem, das nicht so einfach behoben werden kann.
Im Allgemeinen ist es keine gute Idee, zu versuchen, Eigenschaften von Host-Objekten außer Kraft zu setzen (wie window
, document
oder jedes DOM-Element), weil es keine Garantie ist die Umgebung es zulässt. Host-Objekte sind nicht an dieselben Regeln wie native Objekte gebunden und können im Wesentlichen tun, was sie wollen. Es gibt auch keine Garantie dafür, dass eine Host-Methode ein Function
Objekt ist und daher oldSetTimeout
nicht immer eine apply()
Methode haben kann. Dies ist der Fall in IE, so dass der Anruf an oldSetTimeout.apply(this, args);
nicht funktioniert.
würde ich folgendes stattdessen vorschlagen:
window.oldSetTimeout = window.setTimeout;
window.setTimeout = function(func, delay) {
return window.oldSetTimeout(function() {
try {
func();
}
catch (exception) {
//Do Error Handling
}
}, delay);
};
Guter Punkt. Ich änderte meine Antwort; Ich hoffe, es macht dir nichts aus. –
lol, aber jetzt gibt es Antworten, die dasselbe sagen>: | –