`

window.onload 关于页面加载完毕的问题

阅读更多
我们经常使用 window.onload 来处理页面,当页面加载完成做一些事情。但这个 window.onload 是页面全部加载完成,甚至包括图片,而我们实际上经常需要的是文档 DOM 加载完毕

这是原来的方法。
<script type="text/javascript">
function init(){
alert("页面加载完毕!");
}
window.onload=init;
</script>

对于 Mozilla 可以这样
<script type="text/javascript">
// for Mozilla browsers
if (document.addEventListener) {
    document.addEventListener("DOMContentLoaded", function(){alert("DOM加载完毕!")}, null);
}
</script>

对于 IE 浏览器,可以使用IE特有的 defer 属性。
<script defer type="text/javascript">
alert("DOM 加载完毕!")
</script>

非IE浏览器会忽略 defer 而直接执行 script 代码,你可以有两种办法来屏蔽 非IE浏览器。
conditional comments 条件注释
<!--[if IE]>
<script defer type="text/javascript">
alert("DOM 加载完毕!")
</script>
<![endif]-->

conditional compilation 条件编辑
<script defer>
// for Internet Explorer
/*@cc_on @*/
/*@if (@_win32)
    alert("DOM 加载完毕!")
/*@end @*/
</script>

除此之外的浏览器就使用最上面第一个好了。最后一个问题就是要避免 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 id="message"></p>
分享到:
评论

相关推荐

    js 某个页面监听事件渲染完毕的时间.pdf

    比如,在页面加载完成之后加载数据,或者在页面元素加载完成之后初始化组件等。 常见的方法有使用window.onload和jQuery的(document).ready两种。其中,window.onload方法是页面所有资源加载完成之后触发,因此性能...

    15天漫游jQuery中文翻译word版

    数年来程序员们习惯了通过它在页面加载完毕后执行客户端脚本。 但有时候等待页面加载可以让人心急如焚~~ 几张较大的图片文件就可以显著拖慢 window.onload() 的执行 资源太大,传百度网盘了,链接在附件中,有需要的...

    一张表格告诉你windows.onload()与$(document).ready()的区别

    浏览器加载完DOM后,会通过javascript为DOM元素添加事件,在javascript中,通常使用[removed]()方法。...如果想要网页所有内容(包括图片等)加载完毕,再注册事件,使用$(window).load(function); 等价于wi

    jquery实现在页面加载完毕后获取图片高度或宽度

    日前,本技术屌丝又遇到了一个很有意思的问题,应项目要求,需要在页面加载完毕之后获取图片的高度,以此来调整图片上面的覆盖层相对于图片顶端的位置。 但在jquery(function(){ /*XXXXXX*/});里面写了之后发现不是...

    JavaScript页面加载事件实例讲解

    一、onload 加载事件 onload 是 window 对象的一个事件,也可以省略 window 直接使用。... 中的 [removed] 标签中的内容执行速度慢,因为 onload 需要等页面加载完毕才执行,而其他的当页面上的元素创建完毕后就会执行

    判断iframe里的页面是否加载完成

    代码如下: //判断iframe是否加载完成,RMid为iframe的ID document.getElementById(“RMid”).onload = function () { alert... } //在父框架操作iframe页面里的AddReceipt2方法 window.frames[“RMid”].AddReceipt2();

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -修正了使用IFrameUrl的Tab在切换过程中会重复加载的问题,这是一个在v2.1.6引入的问题(feedback:eroach)。 -修正了启用AutoPostBack的Grid,其RowClick会覆盖LinkButtonField, HyperLinkField, CheckBoxField的...

    ExtAspNet_v2.3.2_dll

    -修正了使用IFrameUrl的Tab在切换过程中会重复加载的问题,这是一个在v2.1.6引入的问题(feedback:eroach)。 -修正了启用AutoPostBack的Grid,其RowClick会覆盖LinkButtonField, HyperLinkField, CheckBoxField的...

    大名鼎鼎SWFUpload- Flash+JS 上传

    什么是SWFUpload?  SWFUpload是一个客户端文件上传工具,最初由Vinterwebb.se开发,它通过整合Flash与JavaScript技术为WEB开发者提供了一个具有丰富...SWFpload必须在页面中初始化,一般可以在window.onload事件中...

    JavaScript 复制功能代码 兼容多浏览器(ZeroClipboard)

    "Flash 加载完毕!"&#41;; }); Zero Clipboard 会将 clip 对象作为参数传入。即上例中的 “client” 。 还有 “load” 也可以写成 “onLoad”,其他的事件也可以这样。 其他事件还包括: mouseOver 鼠标移上事件 ...

Global site tag (gtag.js) - Google Analytics