Вот код:
- в браузерах, отличных от IE, используйте событие DOMContentLoaded
- в верхнем фрейме IE использовать хак с прокруткой (см. _ReadyIEtop)
в кадре IE, просто используйте onload
var onready = function(handler) {
// window is loaded already - just run the handler
if(document && document.readyState==="complete") return handler();
// non-IE: DOMContentLoaded event
if(window.addEventListener) window.addEventListener("DOMContentLoaded",handler,false);
// IE top frame: use scroll hack
else if(window.attachEvent && window==window.top) { if(_readyQueue.push(handler)==1) _readyIEtop(); }
// IE frame: use onload
else if(window.attachEvent) window.attachEvent("onload",handler);
};
// IE stuff
var _readyQueue = [];
var _readyIEtop = function() {
try {
document.documentElement.doScroll("left");
var fn; while((fn=_readyQueue.shift())!=undefined) fn();
}
catch(err) { setTimeout(_readyIEtop,50); }
};
jQuery немного настраивает IE (много кода), но в моих тестах он все равно запускается непосредственно перед событием onload.
var test = function() { alert("ok"); }
onready(test);