完美替代window.onload() 的方法

来源:互联网 发布:OpenGL Mac framework 编辑:程序博客网 时间:2024/06/11 13:12
/* * (c)2006 Jesse Skinner/Dean Edwards/Matthias Miller/John Resig * Special thanks to Dan Webb's domready.js Prototype extension * and Simon Willison's addLoadEvent * * For more info, see: * http://www.thefutureoftheweb.com/blog/adddomloadevent * http://dean.edwards.name/weblog/2006/06/again/ * http://www.vivabit.com/bollocks/2006/06/21/a-dom-ready-extension-for-prototype * http://simon.incutio.com/archive/2004/05/26/addLoadEvent *  * * To use: call addDOMLoadEvent one or more times with functions, ie: * *    function something() { *       // do something *    } *    addDOMLoadEvent(something); * *    addDOMLoadEvent(function() { *        // do other stuff *    }); * */ addDOMLoadEvent = (function(){    // create event function stack    var load_events = [],        load_timer,        script,        done,        exec,        old_onload,        init = function () {            done = true;            // kill the timer            clearInterval(load_timer);            // execute each function in the stack in the order they were added            while (exec = load_events.shift())                exec();            if (script) script.onreadystatechange = '';        };    return function (func) {        // if the init function was already ran, just run this function now and stop        if (done) return func();        if (!load_events[0]) {            // for Mozilla/Opera9            if (document.addEventListener)                document.addEventListener("DOMContentLoaded", init, false);            // for Internet Explorer            /*@cc_on @*/            /*@if (@_win32)                document.write("<script id=__ie_onload defer src=//0><\/scr"+"ipt>");                script = document.getElementById("__ie_onload");                script.onreadystatechange = function() {                    if (this.readyState == "complete")                        init(); // call the onload handler                };            /*@end @*/            // for Safari            if (/WebKit/i.test(navigator.userAgent)) { // sniff                load_timer = setInterval(function() {                    if (/loaded|complete/.test(document.readyState))                        init(); // call the onload handler                }, 10);            }            // for other browsers set the window.onload, but also execute the old window.onload            old_onload = window.onload;            window.onload = function() {                init();                if (old_onload) old_onload();            };        }        load_events.push(func);    }})();
原创粉丝点击