总结:由于IE6/7/8不支持DOMContentLoaded事件,虽然它支持onreadystatechange事件,但是readyState=complete几乎和onload事件一样,需要等页面中的外部资源加载完后才触发,想要尽快可采用doScroll检测法(仅在非iframe下有效)

 var turbo = turbo || {};
var W3C = document.addEventListener ? true : false;
var doc = document, html = document.documentElement;
var readyList = [];
turbo.ready = function(fn) {
//不管是哪个分支,只要触发过一次ready事件readyList就会为null
if (readyList) {
readyList.push(fn);
} else {
fn();
}
};
function fireReady() {
if (readyList && readyList.length) {
for (var i = 0, len = readyList.length; i < len; i++) {
var fn = readyList[i];
fn();
}
}
readyList = null;
} function doScrollCheck() {
try {
html.doScroll('left');
fireReady();
} catch (e) {
setTimeout(doScrollCheck, 50);
}
} var ready = W3C ? "DOMContentLoaded" : "readystatechange";
//由于firefox3.6不支持readyState,则在不支持readyState的时需手动赋值给它
if (!doc.readyState) {
//如果doc.body已存在则说明domcontentloaded了,将doc.readySate设置为complete
var readyState = doc.readySate = doc.body ? "complete" : "loading";
} if (doc.readyState == 'complete') {
fireReady();
} else {
$.bind(doc, ready, function() {
if (W3C || doc.readyState == 'complete') {
fireReady();
//firefox3.6,我觉得这里设不设置都行,因为这里已经用不到了doc.readyState了
if (readyState) {
doc.readyState = 'complete';
}
}
})
//ie下使用doScroll,尽量提前触发ready,此方法只在非iframe下的页面有效
var top = false;
try {
top = doc.frameElement == null && doc.documentElement;
} catch (e) {}
if (top && top.doScroll) {
doScrollCheck();
}
}

有点看不懂mass里最后一段调用doScrollCheck的代码,故采用的jQuery的写法.

最新文章

  1. 移动端前端框架UI库(Frozen UI、WeUI、SUI Mobile)
  2. 从高版本JDK换成低版本JDK报错Unsupported major.minor version 52.0
  3. hdu 2645 find the nearest station
  4. jquery功能实现总结
  5. 浅谈JS中的闭包
  6. BZOJ 2626 JZPFAR(KD-tree)
  7. jenkins 多选框
  8. JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】
  9. Jenkins项目部署使用教程-----02视图及项目添加
  10. js canvas获取图片base64 dataUrl
  11. 认证登录装饰器与form组件的使用
  12. HDU 4576 Robot
  13. C#——LINQ语句
  14. Spring 注解原理(三)@Qualifier @Value
  15. hao643.com劫持(修改快捷方式跳转至hao123.com)
  16. Linux系统中切换用户身份su与sudo的用法与实例
  17. WebForm Response和Request以及Cookie
  18. Linux期中架构 全网备份案例
  19. unity之定制脚本模板
  20. STM32 HAL库学习系列第5篇 定时器TIM---编码器接口模式配置

热门文章

  1. hdu 4864 Task---2014 Multi-University Training Contest 1
  2. HTML5游戏开发引擎Pixi.js完全入门手册(二)元素对象属性解析
  3. 开源项目:底部动作条(BottomSheet)
  4. shell文字过滤程序(十一):paste命令
  5. C语言字符串函数大全
  6. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(8)-DbSession线程内唯一
  7. Spring框架和MVC原理
  8. Python开发环境的搭建(win7)
  9. 从头开始学JavaScript (十三)——Date类型
  10. AJAX及其跨域的主要解决方法