Я думаю, что сбои могли быть связаны с использованием window.setTimeout()
и window.setInterval()
, так как они кажутся единственными общими функциями, используемыми в разных файлах JS, которые приводят к прекращению сбоя проекта при закомментировании. В нашем global.js я добавил этот код для использования вместо:
(function (w) {
w.windowBind = function (eventName, handler) {
if (w.attachEvent) {
w.attachEvent("on" + eventName, handler);
} else if (w.addEventListener) {
w.addEventListener(eventName, handler, false);
}
};
var timeoutsToExpire = [],
expireTimeouts = function () {
for (var i = 0, l = timeoutsToExpire.length; i < l; i++) {
w.clearTimeout(timeoutsToExpire[i]);
}
timeoutsToExpire = [];
},
intervalsToExpire = [],
expireIntervals = function () {
for (var i = 0, l = intervalsToExpire.length; i < l; i++) {
w.clearInterval(intervalsToExpire[i]);
}
intervalsToExpire = [];
};
w.setExpiringTimeout = function (func, time) {
var id = w.setTimeout(func, time);
timeoutsToExpire.push(id);
return id;
};
w.setExpiringInterval = function (func, time) {
var id = w.setInterval(func, time);
intervalsToExpire.push(id);
return id;
};
w.windowBind("unload", function () {
// expire timers
expireTimeouts();
expireIntervals();
});
w.windowBind("beforeunload", function () {
// expire timers
expireTimeouts();
expireIntervals();
});
})(window);
Затем я обновил предыдущие ссылки window.setTimeout()
и window.setInterval()
, чтобы использовать эти помощники. Кажется, сейчас это исправлено.
Обновление: может быть, я отправил слишком рано, он просто снова потерпел крах для меня. Хотя сейчас они кажутся очень прерывистыми.
Обновление 2: хорошо, похоже, что это происходит надежно, когда я смещаю + обновляю сейчас, тьфу.
Обновление 3: опробовал последнюю версию jQuery RC, и сбои прекратились, в примечаниях к выпуску упоминаются 2 ошибки сбоя IE8: http://blog.jquery.com/2011/08/29/jquery-1-6-3-rc1-released/