模拟Jquery 的ready,按需加载JS
<script type="text/javascript"> /** * * 模拟jquery的ready * */ var ready = (function(){ var isReady = false, funs = []; function handle (e) { if ( isReady ) { return; } if ( e.type === 'readystatechange' && (document.readyState !== 'interactive' && document.readyState !== 'complete') ) { return; } for ( var i = 0; i < funs.length; i++ ) { funs[i].call(document); } isReady = true; funs = null; } if ( document.addEventListener ) { document.addEventListener( 'DOMContentLoaded', handle, false ); document.addEventListener( 'readystatechange', handle, false ); document.addEventListener( 'load', handle, false ); } else if ( document.attachEvent ) { document.attachEvent( 'onreadystatechange', handle ); document.attachEvent( 'onload', handle ); } return function ready (callback) { if ( isReady ) { callback.call(document); } else { funs.push(callback); } }; }()); /** * * 判断参数类型 * createTime: 2013/9/18 * */ function type (obj) { var classTypes, objectTypes; if ( obj == null ) { return String(obj); } classTypes = {}; objectTypes = ('Boolean Number String Function Array Date RegExp Object Error').split(' '); for ( var i = 0, len = objectTypes.length; i < len; i++ ) { classTypes[ '[object ' + objectTypes[i] + ']' ] = objectTypes[i].toLowerCase(); } if ( typeof obj === 'object' || typeof obj === 'function' ) { var key = Object.prototype.toString.call(obj); return classTypes[key]; } return typeof obj; } // css按需加载 function loadCss (cssUrl, callback) { var elem, bl, isExecuted = false; // 防止在ie9中,callback执行两次 if ( cssUrl == null ) { return String(cssUrl); } elem = document.createElement('link'), elem.rel = 'stylesheet'; if ( type(callback) === 'function' ) { bl = true; } // for ie function handle() { if ( elem.readyState === 'loaded' || elem.readyState === 'complete' ) { if (bl && !isExecuted) { callback(); isExecuted = true; } elem.onreadystatechange = null; } } elem.onreadystatechange = handle; // for 非ie if (bl && !isExecuted) { elem.onload = callback; isExecuted = true; } elem.href = cssUrl; document.getElementsByTagName('head')[0].appendChild(elem); } // js按需加载 function loadScript(scriptUrl, callback) { var elem, bl, isExecuted = false; // 防止在ie9中,callback执行两次 if (scriptUrl == null) { return String(fn); } elem = document.createElement('script'); if ( type(callback) === 'function' ) { bl = true; } // for ie function handle(){ var status = elem.readyState; if (status === 'loaded' || status === 'complete') { if (bl && !isExecuted) { callback(); isExecuted = true; } elem.onreadystatechange = null; } } elem.onreadystatechange = handle; // for 非ie if (bl && !isExecuted) { elem.onload = callback; isExecuted = true; } elem.src = scriptUrl; document.getElementsByTagName('head')[0].appendChild(elem); } </script>