在IE8部分浏览器及以下,是不支持该事件的
并且该事件不具备 句柄形式 , 所以 attachEvent 也不行
function domReady(fn) {
if(document.addEventListener) {
document.addEventListener('DOMContentLoader', function () {
docuement.removeEventListener('DOMContentLoader', arguments.callee, false) // 队列会等待事件执行完后,再删除该事件
fn();
}, false)
} else if(document.attachEvent) {
document.attachEvent('onreadystatechange', function () {
if(document.readyState === 'compete') {
// 低版本浏览器, interactive 不稳定
document.detachEvent('onreadystatechange', argument.callee)
fn();
}
})
}
if(document.documentElement.onScroll && typeof(window.frameElement) === 'undefined') {
// 在低版本中, doScroll在文档没有解析完成时容易报错
try {
document.documentElement.doScroll('left');
} catch (e) {
return setTimeout(argument.callee, 20)
}
fn();
}
}
callee / caller
callee:正在被执行的函数对象
caller:调用当前函数的引用 (现放在 callee.caller)
attachEvent / detachEvent
低版本采用句柄方式监听事件