让页面加载前执行js等事件
    让页面加载前执行js等事件  
由于 window.onload 事件需要在页面所有内容(包括图片等)加载完后,才执行,但往往我们更希望在 DOM 一加载完就执行脚本。其实在现在大部分主流浏览器上(Firefox 3+,Opera 9+,Safari 3+,Chrome 2+)都提供了这一事件方法:addDOMLoadEvent。 
document.addEventListener("DOMContentLoaded", init, false); 
那对于 IE 我们如何模拟 addDOMLoadEvent 事件呢? 
Matthias Miller 最早提供了如下的解决方案: 
// for Internet Explorer (using conditional comments) 
/*@cc_on @*/ 
/*@if (@_win32) 
document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>"); 
var script = document.getElementById("__ie_onload"); 
script.onreadystatechange = function() { 
    if (this.readyState == "complete") { 
        init(); // call the onload handler 
    } 
}; 
/*@end @*/ 
而 Diego Perini 在其后提供了一种利用 doScroll() 方法来模拟 addDOMLoadEvent 事件的方案,且现在主流的 JavaScript 框架(JQuery、YUI等)基本都采用的这一解决方案。 
原理基本如下: 
当 ondocumentready 事件触发,文档( document )已经完全解析和建立。如果组件需要操作最初的文档结构,初始化代码需被安置在这之后。ondocumentready 事件告知组件,整个页面已被加载,且在 初始文档的 onload 事件触发之前立即触发。 
一些方法,例如 doScroll,要求最初的文档被完全加载。如果这些方法是初始化函数的一部分,当ondocumentready 事件触发,他们将被执行。 
/* 
* 
* IEContentLoaded.js 
* 
* Author: Diego Perini (diego.perini at gmail.com) NWBOX S.r.l. 
* Summary: DOMContentLoaded emulation for IE browsers 
* Updated: 05/10/2007 
* License: GPL/CC 
* Version: TBD 
* 
*/ 
// @w    window reference 
// @fn 
    function referencefunction IEContentLoaded (w, fn) { 
    var d = w.document, done = false, 
    // only fire once 
    init = function () { 
        if (!done) { 
            done = true; 
            fn(); 
        } 
    }; 
    // polling for no errors 
    (function () { 
        try { 
            // throws errors until after ondocumentready 
            d.documentElement.doScroll(’left’); 
        } catch (e) { 
            setTimeout(arguments.callee, 50); 
            return; 
        } 
        // no errors, fire 
        init(); 
    })(); 
    // trying to always fire before onload 
    d.onreadystatechange = function() { 
        if (d.readyState == ’complete’) { 
            d.onreadystatechange = null; 
            init(); 
        } 
    }; 
} 
JQuery 1.3.2 中源码实现如下: 
// If IE and not an iframe 
// continually check to see if the document is ready 
if ( document.documentElement.doScroll && window == window.top ) (function(){ 
    if ( jQuery.isReady ) return; 
    try { 
        // If IE is used, use the trick by Diego Perini 
        // http://javascript.nwbox.com/IEContentLoaded/ 
        document.documentElement.doScroll("left"); 
  &