Lib稳定版本 //文件名:Lib.js //JsLib必须包含的头文件 //作者:LuoYingBin var Lib = { path: null, //库文件目录 scripts: [], //所有已包含的js allScripts: [], //所有文件名,用于检测重复项 cachScripts: [],//JS文件名缓存 modules: [], //所有程序包 main: function() { }, //程序入口 //取文件目录 GetFilePath: function(fn) { var path = ""; var found = false; var scripts = document.getElementsByTagName("SCRIPT"); for (var i = 0; i < scripts.length; i++) { var fullPath = scripts[i].src; var index = fullPath.lastIndexOf("/"); var fileName = fullPath.substr(index + 1); if (fileName.toLowerCase() == fn.toLowerCase()) { if (found) { alert("警告:您在代码中多次导入[" + fn + "],这有可能导致错误"); } path = fullPath.substring(0, index + 1); found = true; } } if (!found) { alert("警告:无法找到文件[" + fn + "]"); } return path; }, GetLibPath: function() { if (this.path == null) { this.path = Lib.GetFilePath("Lib.js"); } return this.path; }, //加载JS文件 LoadScript: function(scr, language) { if (language == null) { language = "javascript"; } var script = document.createElement("script"); script.type = "text/" + language; script.language = language; script.onload = script.onreadystatechange = function() { if (!this.readyState //fireFox下无readyState属性 || this.readyState == 'loaded' || this.readyState == 'complete') {//IE下判断 this.isLoaded = true; //设置已加载标志 Lib.Trying(); } } script.src = scr; var head = document.getElementsByTagName("head")[0]; head.appendChild(script); return script; }, LinkCSS: function(url) { try { var link = document.createElement("link"); link.rel = "stylesheet"; link.type = "text/css"; link.href = url; var head = document.getElementsByTagName("head")[0]; head.appendChild(link); return link; } catch (err) { return null; } }, //文件包含函数,所取目录相对于Lib.js所在目录 include: function(path) { for (var i = 0; i < this.allScripts.length; i++) { if (path.toLowerCase() == this.allScripts[i].toLowerCase()) { return; //出现重复,跳过 } } this.allScripts.push(path); this.cachScripts.push(path); }, newModule: function(module) { this.modules.push(module); }, //开始运行程序 Run: function() { this.Trying(); }, //偿试中 Trying: function() { while (this.cachScripts.length > 0) { var path = this.cachScripts.pop(); var fp = this.path + path; this.scripts.push(this.LoadScript(fp)); } for (var i = 0; i < this.scripts.length; i++) { if (!this.scripts[i].isLoaded) return; } for (var i = this.modules.length - 1; i >= 0; i--) { var fun = this.modules[i]; var rv = fun(); if (rv == null) { continue; } //将包返回的全局变量抛给window for (var attr in rv) { window[attr] = rv[attr]; } } this.main(); } } Lib.path = Lib.GetFilePath("Lib.js"); Lib.isIE = (function() { if (navigator.userAgent.indexOf("MSIE") > 0) { return true; } else { return false; } })(); if (Lib.isIE) {//IE window.attachEvent("onload", function() { Lib.Run(); }); } else {//FIREFOX window.addEventListener("load", function(evn) { Lib.Run(); }, false); } function include(path) { Lib.include(path); } function newModule(fun) { Lib.newModule(fun); } 示例 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <!--库文件所必须的三个文件--> <mce:script src="../JsLib/prototype.js" mce_src="JsLib/prototype.js" type="text/javascript"></mce:script> <mce:script src="../JsLib/prototype_ext.js" mce_src="JsLib/prototype_ext.js" type="text/javascript"></mce:script> <mce:script src="../JsLib/Lib.js" mce_src="JsLib/Lib.js" type="text/javascript"></mce:script> <!--库文件所必须的三个文件--> <mce:script language="javascript" type="text/javascript"><!-- //这使得我们的程序,看起来非常类似一个C/C++文件 include("MD5.js"); //头文件包含 Lib.main = function() { //这是主函数 var pwd = "abc"; var md5Pwd = MD5.Compute("abc"); alert(pwd + "经过MD5加密过后的内容为:/r/n" + md5Pwd); } // --></mce:script> </head> <body> </body> </html>