一个通用onReady函数的实现

define([], function(){

    function onReady(fn) {
        var DOC = document,
            html = DOC.documentElement,
            W3C = document.dispatchEvent;
        //FF以前是没有readyState属性的
        //判断body是否存在来决定DOM文档是否加载完毕
        if (!DOC.readyState) {
        var readyState = DOC.readyState = DOC.body ? "complete" : "loading";
        }
        //如果页面已经完全载入完毕直接执行回调函数
        if (DOC.readyState === "complete") {
            setTimeout(fn);
        //现代游览器和IE>=IE9
        } else if (W3C) {
            DOC.addEventListener('DOMContentLoaded', function(){
                if (readyState) {
                    DOC.readyState = 'complete';
                }
                fn();
            }, false);
        } else {
            ieReady(fn);
        }
    }

    function ieReady(fn) {
       try {
           //处理iframe中引入的页面在IE下无法通过doScroll判断DOM知否加载完毕
           if (self !== top && self.document.readyState !== 'complete') {
               setTimeout(function(){
                     ieReady.call(window, fn)
                 })
           } else if (self !== top && self.document.readyState === 'complete') {
               arguments[0]();
           } else {
               document.documentElement.doScroll('left');
                 arguments[0]();
           }
         } catch (e) {
             setTimeout(function(){
                 ieReady.call(window, fn)
             })
       }
   };

   AS.extend({
       'onReady': onReady
   });
   return onReady;
})

时间: 2024-11-05 10:52:18

一个通用onReady函数的实现的相关文章

模仿qsort() 实现一个通用排序函数:msort()

github:  https://github.com/youker-lxy/msort 截图: 对测试模块不是很了解,以下测试函数未实现: test_msort.c  测试 msort.c 的所有函数 test_generate_data.c  测试 generate_data.c 的所有函数 程序中只产生了int类型的随机数据并排序,未进行其他类型的排序. 总结: 1 通用排序函数实现: qsort()采用快排算法,传入参数为:数组首地址, 左侧下标, 右侧下标, 数组元素大小,  以及传入

IMP本质上是一个通用的函数指针

IMP:通用的函数指针 /// A pointer to the function of a method implementation. #if !OBJC_OLD_DISPATCH_PROTOTYPES typedef void (*IMP)(void /* id, SEL, ... */ ); #else typedef id (*IMP)(id, SEL, ...); #endif #if !OBJC_OLD_DISPATCH_PROTOTYPES OBJC_EXPORT void ob

C 封装一个通用链表 和 一个简单字符串开发库

引言 这里需要分享的是一个 简单字符串库和 链表的基库,代码也许用到特定技巧.有时候回想一下, 如果我读书的时候有人告诉我这些关于C开发的积淀, 那么会走的多直啊.刚参加工作的时候做桌面开发, 服务是C++写,界面是C#写.那时候刚进去评级我是中级,因为他问我关于系统锁和信号量都答出来.开发一段 时间,写C#也写的很溜.后面招我那个人让我转行就写C++和php,那时候就开始学习C++有关知识. 后面去四川工作了,开发安卓,用eclipse + java语法 + android jdk,开发前端,

Linux C编程学习4---多文件项目管理、Makefile、一个通用的Makefile

GNU Make简介 大型项目的开发过程中,往往会划分出若干个功能模块,这样可以保证软件的易维护性. 作为项目的组成部分,各个模块不可避免的存在各种联系,如果其中某个模块发生改动,那么其他的模块需要相应的更新.如果通过手动去完成这个工作的话,对于小型的项目可能还行,但是对于比较大型的项目就几乎是不可能的. 因此Linux 系统提供了一个自动维护和生成目标程序的工具 make,它可以根据各个模块的更改情况去重新编译连接目标代码 Make 工具的作用就是实现编译连接过程的自动化.它定义了一种语言,用

C 可变长参数运用-----编写Lua的通用调用函数

1.C可变长参数 printf这个使用频繁的C语言函数的参数列表包含一个const char*的描述串,还有一个可变长参数(...) ,如下为printf的函数声明. int printf(const char * __restrict, ...) 在stdarg.h这个头文件中包含着对可变长参数进行操作的一些宏(x86平台为例): #define va_start(ap,v)( ap = (va_list)&v + _INTSIZEOF(v) ) #define va_arg(ap,t) ( 

一个通用的Makefile (转)

据http://bbs.chinaunix.net/thread-2300778-1-1.html的讨论,发现还是有很多人在问通用Makefile的问题,这里做一个总结.也作为以后的参考. 笔者在写程序的时候会遇到这样的烦恼:一个项目中可能会有很多个应用程序,而新建一个应用程序则所有的Makefile都要重写一遍,虽然可以部分的粘帖复制,但还是感觉应该找到更好的解决途径:另外当一个应用程序中包含多个文件夹时通常要在每个目录下创建一个Makefile,当有数十个文件夹时,要创建如此多的Makefi

通用js函数集锦<来源于网络> 【二】

通用js函数集锦<来源于网络> [二] 1.数组方法集2.cookie方法集3.url方法集4.正则表达式方法集5.字符串方法集6.加密方法集7.日期方法集8.浏览器检测方法集9.json方法10.extend方法11.类型判断的方法 数组方法集 Angela.array = { //# 数组方法 // index, 返回位置! 不存在则返回 -1: index: function (t, arr) { //# 返回当前值所在数组的位置 if (arr.indexOf) { return ar

通用js函数集锦&lt;来源于网络/自己&gt; 【一】

通用js函数集锦<来源于网络/自己>[一] 1.返回一个全地址2.cookie3.验证用户浏览器是否是微信浏览器4.验证用户浏览器是否是微博内置浏览器5.query string6.验证用户设备来源7.JS验证邮件地址是否合法8.JS获取字符串长度(区分中英文) 中文算2个字,英文一个9.检查手机号码是否合法10.验身份证号码是否正确11.删除cookie12.数组是否包函字符串元素13.后退14.向上滚动到指定位置15.判断是否为身份证16.判断是否为2~15字姓名17.修复IE中 inpu

公司Android项目公共通用的函数和方法

/** * 一些通用的函数 */ public class FunctionUtil { private static long lastClickTime = 0; /** * 开始用的这种,后来就不限制,调用checkPhone方法. 判断手机格式是否正确,在注册和修改手机号码的时候用到 * * @param mobiles * @return true:正确的手机号码 */ public static boolean isMobileNO(String mobiles) { // Patt