function a(){
alert("a");}function b(){
alert("b");}// Please note: this file contains snippets for comparison // it is not self-contained or ready-to-use code as such function addLoadListener(fn){if(typeof window.addEventListener!='undefined'){
window.addEventListener('load', fn,false);}elseif(typeof document.addEventListener!='undefined'){
document.addEventListener('load', fn,false);}elseif(typeof window.attachEvent!='undefined'){
window.attachEvent('onload', fn);}else{var oldfn = window.onload;if(typeof window.onload!='function'){
window.onload= fn;}else{
window.onload=function(){
oldfn();
fn();};}}}//测试
addLoadListener(a);
addLoadListener(b);
/*
* (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:
* addDOMLoadEvent的调用方法,如下:
* function something() {
* // do something
* }
* addDOMLoadEvent(something);
*
* addDOMLoadEvent(function() {
* // do other stuff
* });
*
*/
addDOMLoadEvent =(function(){// create event function stackvar 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='';};returnfunction(func){// if the init function was already ran, just run this function now and stopif(done)return func();if(!load_events[0]){// for Mozilla/Opera9/*
DOMContentLoaded是firefox下特有的Event, 当所有DOM解析完以后会触发这个事件。
注册DOMContentLoaded事件,如果支持的话
*/if(document.addEventListener)
document.addEventListener("DOMContentLoaded", init,false);// for Internet Explorer/*
对于IE则使用条件注释,并使用script标签的defer属性
IE中可以给script标签添加一个defer(延迟)属性,这样,标签中的脚本只有当DOM加载完毕后才执行*//*@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/*
但对于Safari,我们需要使用setInterval方法不断检测document.readyState
当为loaded或complete的时候表明DOM已经加载完毕
*/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);}})();