Это потому, что вы используете выражений именованных функций , которые неправильно реализованы в IE.Удаление имен функций решит непосредственную проблему.См. kangax отличную статью на эту тему .Однако есть еще одна проблема, которую не так легко решить.
В общем случае не стоит пытаться переопределять свойства хост-объектов (таких как window
, document
или любой элемент DOM)потому что нет никакой гарантии, что окружающая среда позволит это.Хост-объекты не связаны теми же правилами, что и нативные объекты, и по сути могут делать то, что им нравится.Также нет гарантии, что метод хоста будет объектом Function
, и, следовательно, oldSetTimeout
не всегда может иметь метод apply()
.В IE это так, поэтому вызов oldSetTimeout.apply(this, args);
не будет работать.
Вместо этого я бы предложил следующее:
window.oldSetTimeout = window.setTimeout;
window.setTimeout = function(func, delay) {
return window.oldSetTimeout(function() {
try {
func();
}
catch (exception) {
//Do Error Handling
}
}, delay);
};