稍微了解一点框架的事件绑定的都知道 window.onload 事件需要在页面所有内容(包括图片、flash、iframe等)加载完后,才执行,但往往我们更希望在 DOM 一加载完就执行脚本,而各大框架都提供了这样的方法,今天就讨论下其中的原理。

标准浏览器都提供了一个DomContentLoaded事件来实现,我们只需要注册相应的事件就可以了,而在IE浏览器里则需要模仿实现。

IE浏览器里最早的解决方案是绑定document.onreadystatechange事件,判断readyState是否为complete,但是当页面有iframe时就无法及时触发了(等到iframe加载完毕readyState的值才会变为complete)

而之后有了一种利用 doScroll() 方法来模拟 addDOMLoadEvent 事件的方案,且现在主流的 JavaScript 框架(JQuery、YUI,kissy等)基本都采用的这一解决方案。doScroll判断页面是否可以滚动,如果可以滚动,那么就意味着文档加载完毕了。

kissy里面的判断:

doScroll

标准浏览器的绑定:

这里要说明的是在触发了DomContentLoaded这个事件之后就会取消该事件,避免反复触发,之后就去执行绑定在ready方法上的所有函数了

而IE浏览器下的绑定大同小异,换成了onreadystatechange而已

但是仅仅绑定是不够的,下面还要判断是否在有iframe的页面内,在iframe中则通过document的onreadystatechange来实现,否则通过不断测试doScroll是否可用来实现。不过经测试(本人未测试过),即使是在iframe中,doScroll依然有

最新文章

  1. spring源码分析之context
  2. Linux 如何实现 VLAN - 每天5分钟玩转 OpenStack(12)
  3. iOS文件解压&&数据加密
  4. Spring MVC 问题列表:目录
  5. 线程池之ThreadPool类与辅助线程 - <第二篇>
  6. LGPL与闭源程序
  7. 用EnableMenuItem不能使菜单变灰的原因
  8. C1 FlexGrid控件 Editor 冲突问题
  9. Android 执行 adb shell 命令
  10. 苹果新的编程语言 Swift 语言进阶(四)--字符串和收集类型
  11. 安装ns2.34,802.11p的各种包的时候遇到问题
  12. Python学习第五篇——如何访问字典
  13. 抓包工具之fiddler
  14. webpack学习笔记--配置entry
  15. ﺑﯘﻟﺒﯘﻟﻼﺭ--思恋--IPA--维吾尔语
  16. spring mvc 异常处理
  17. finger-guessing game:2增加游戏进度,界面title及游戏界面
  18. 解密DNSPOD应对DDoS攻击招式!
  19. mvc中actionresult的返回值类型
  20. mysql 下 计算 两点 经纬度 之间的距离 含具体sql语句

热门文章

  1. 【POJ 3090】 Visible Lattice Points
  2. B1567 [JSOI2008]Blue Mary的战役地图 二分答案+hash
  3. [JavaEE] DWR框架实现Ajax
  4. element-ui 分页中的slot的用法(自定义分页显示内容)
  5. awk杂集-20170911
  6. Centos7中 文件大小排序
  7. Oracle数据库实例
  8. 使用Custom scrollbar(彩色滚动条)插件实现WordPress滚动条变色的方法
  9. 【MFC】虚拟键代码
  10. hdu4081 Qin Shi Huang's National Road System 次小生成树