Каков ваш последний else
-класс
else {document.addEventListener('load', c_onload, false);
для? Это довольно бесполезно, имхо.
Следующее должно быть кросс-браузерным решением: сначала проверяется addEventListener()
, затем attachEvent()
и возвращается к onload = ...
function chain(f1, f2) {
return typeof f1 !== 'function' ? f2 : function() {
var r1 = f1.apply(this, arguments),
r2 = f2.apply(this, arguments);
return typeof r1 === 'undefined' ? r2 : (r1 && r2);
};
}
function addOnloadListener(func) {
if(window.addEventListener)
window.addEventListener('load', func, false);
else if(window.attachEvent)
window.attachEvent('onload', func);
else window.onload = chain(window.onload, func);
}
Кроме того, что сказал кгианнакакис
Причина в том, что браузеры по-разному обрабатывают событие onLoad.
не соответствует действительности: все основные браузеры обрабатывают window.onload
одинаково, то есть функция слушателя выполняется после загрузки внешних ресурсов - , включая ваш внешний скрипт -. Проблема заключается в DOMContentLoaded
- вот где в игру вступают хаки с doScroll()
, defer
, onreadystatechange
и всем остальным, что кто-то приготовил.
В зависимости от вашей целевой аудитории вы можете либо отказаться от резервного кода, либо даже использовать его исключительно. Мой голос должен был бы быть отброшен.