// version 1.0 (function() { var _doc = document, _win = window, // 已加载模块, _loaded[fileURL]=true _loaded = {}, // 加载中的模块,对付慢文件,_loadingQueue[url]=true|false _loadingQueue = {}, _isArray = function(e) { return e.constructor === Array; }, // 内部配置文件 _config = { // 是否自动加载核心库 autoLoad: true, //核心库 coreLib: ['http://t.douban.com/js/jquery.min.js'], //模块依赖 //{ // moduleName: { // path: 'URL', // type:'js|css', // requires:['moduleName1', 'fileURL'] // } //} mods: {} }, // 插入的参考结点 _jsFiles = _doc.getElementsByTagName('script'), _jsSelf = _jsFiles[_jsFiles.length - 1], _jsConfig, _do, _readyList = [], _isReady = false, // 全局模块 _globalList = [], // 加载js/css文件 _load = function(url, type, charset, cb, context) { var refFile = _jsFiles[0]; if (!url) { return; } // @TODO 临时应对劫持 by dexteryy /* url = url.replace(/([\?&])+tqs=[^&]*./, "$1").replace(/(\?|$)/, "?tqs=20110616&"); */ if (_loaded[url]) { _loadingQueue[url] = false; if (cb) { cb(url, context); } return; } // 加载中的文件有可能是太大,有可能是404 // 当加载队列中再次出现此模块会再次加载,理论上会出现重复加载 if (_loadingQueue[url]) { setTimeout(function() { _load(url, type, charset, cb, context); }, 1); return; } _loadingQueue[url] = true; var n, t = type || url.toLowerCase().split(/\./).pop().replace(/[\?#].*/, ''); if (t === 'js') { n = _doc.createElement('script'); n.setAttribute('type', 'text/javascript'); n.setAttribute('src', url); n.setAttribute('async', true); } else if (t === 'css') { n = _doc.createElement('link'); n.setAttribute('type', 'text/css'); n.setAttribute('rel', 'stylesheet'); n.setAttribute('href', url); _loaded[url] = true; } if (!n) { return; } if (charset) { n.charset = charset; }