您正在寻找的花式交叉浏览器解决方案....并不存在...(想象一个拥挤的人说'aahhhh ....')的声音。
DomContentLoaded只是你最好的拍摄。 IE-oldies仍然需要polling
技术。
- 尝试使用addEventListener;
- 如果不可用(IE明显),检查帧;
- 如果不是帧,滚动直到没有错误被抛出(轮询);
- 如果一帧,使用IE事件document.onreadystatechange;
- 对于其他不支持的浏览器,请使用旧的document.onload事件。
我发现在javascript.info下面的代码示例,您可以使用支付所有的浏览器:
function bindReady(handler){
var called = false
function ready() {
if (called) return
called = true
handler()
}
if (document.addEventListener) { // native event
document.addEventListener("DOMContentLoaded", ready, false)
} else if (document.attachEvent) { // IE
try {
var isFrame = window.frameElement != null
} catch(e) {}
// IE, the document is not inside a frame
if (document.documentElement.doScroll && !isFrame) {
function tryScroll(){
if (called) return
try {
document.documentElement.doScroll("left")
ready()
} catch(e) {
setTimeout(tryScroll, 10)
}
}
tryScroll()
}
// IE, the document is inside a frame
document.attachEvent("onreadystatechange", function(){
if (document.readyState === "complete") {
ready()
}
})
}
// Old browsers
if (window.addEventListener)
window.addEventListener('load', ready, false)
else if (window.attachEvent)
window.attachEvent('onload', ready)
else {
var fn = window.onload // very old browser, copy old onload
window.onload = function() { // replace by new onload and call the old one
fn && fn()
ready()
}
}
}
有什么消息对此有何看法?这个答案在这里坐了2.5年...也许浏览器供应商和标准现在更好地加快速度? – Akku 2011-05-12 14:08:30
不,尽管IE9现在也支持DOMContentLoaded。所以我们只是坐等IE9浏览器的市场份额低于1%。 – 2013-03-11 14:25:26