转自:http://blog.guoshuang.com/david/showlog.asp?log_id=2964英文原文在此:http://dean.edwards.name/weblog/2005/09/busted/大意如下:我们经常使用 window.onload 来处理页面,当页面加载完成做一些事情。但这个 window.onload 是页面全部加载完成,甚至包括图片,而我们实际上经常需要的是文档 DOM 加载完毕!这是原来的方法。[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]对于 Mozilla 可以这样[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]对于 IE 浏览器,可以使用IE特有的 defer 属性。[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]非IE浏览器会忽略 defer 而直接执行 script 代码,你可以有两种办法来屏蔽 非IE浏览器。conditional comments 条件注释<!--[if IE]> <script defer type="text/javascript"> alert("DOM 加载完毕!") </script> <![endif]--> [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]conditional compilation 条件编辑<script defer> // for Internet Explorer /*@cc_on @*/ /*@if (@_win32) alert("DOM 加载完毕!") /*@end @*/ </script> [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]除此之外的浏览器就使用最上面第一个好了。最后一个问题就是要避免 onload 运行多次的问题,加入判断。<script type="text/javascript"> function init() { // quit if this function has already been called if (arguments.callee.done) return; // flag this function so we don't do the same thing twice arguments.callee.done = true; // create the "page loaded" message var text = document.createTextNode("Page loaded!"); var message = document.getElementById("message"); message.appendChild(text); }; /* for Mozilla */ if (document.addEventListener) { document.addEventListener("DOMContentLoaded", init, null); } /* for Internet Explorer */ /*@cc_on @*/ /*@if (@_win32) document.write("<script defer src=ie_onload.js><"+"/script>"); /*@end @*/ /* for other browsers */ window.onload = init; </script> <p ></p> 真是很佩服老外的这种钻研精神,这么个小问题引申出来这么多知识,值得我们好好学习。:( 相关文章: