Ich versuche, der JavaScript-setTimeout-Funktion meine eigene Fehlerbehandlung hinzuzufügen. Der folgende Code funktioniert in Chrome:
%Vor% Aber in IE7 wird es zu einer rekursiven Funktion. Aus irgendeinem Grund wird oldSetTimeout
auf die neue Funktion gesetzt.
Irgendwelche Vorschläge?
Randnotiz: Ja, ich muss es so machen. Ich benutze einen Stapel von 3rd-Party-Bibliotheken, die alle nicht gut mit setTimeout umgehen, also kann ich nicht einfach die Aufrufe von setTimeout ändern.
Dies liegt daran, dass Sie benannte Funktionsausdrücke verwenden, die im IE nicht korrekt implementiert sind. Durch das Entfernen der Funktionsnamen wird das unmittelbare Problem behoben. Siehe kangax ausgezeichneten Artikel auf dieses Thema . Es gibt jedoch ein anderes Problem, das nicht so einfach behoben werden kann.
Im Allgemeinen ist es keine gute Idee, Eigenschaften von Hostobjekten (wie window
, document
oder ein beliebiges DOM-Element) außer Kraft zu setzen, da es keine Garantie dafür gibt, dass die Umgebung dies 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
möglicherweise nicht immer eine apply()
-Methode hat. Dies ist in IE der Fall, daher wird der Aufruf von oldSetTimeout.apply(this, args);
nicht funktionieren.
Ich würde stattdessen Folgendes vorschlagen:
%Vor%Tags und Links javascript override settimeout global