用javascript动态加载javascript脚本/css样式表
2011-06-21 17:02
351 查看
用javascript动态加载javascript脚本/css样式表
// 命名空间对象 Namespace = new Object(); Namespace.register = function(fullname) { try { var nsArray = fullname.split("."); var strNS = ""; var strEval = ""; for (var i = 0; i < nsArray.length; i++) { if (strNS.length > 0) strNS += "."; strNS += nsArray[i]; strEval += " if(typeof(" + strNS + ") =='undefined') " + strNS + " = new Object(); "; } if (strEval != "") eval(strEval); } catch (e) { alert(e.message); } } //注册命名空间 Namespace.register('Common'); /**动态加载资源文件(js 文件和 css 文件)**/ Common.srcLoader = { /**入口函数**/ /* fileList: 需要动态加载的资源列表 */ /* callback: 所有资源都加载完后调用的回调函数,通常是页面上需要onload就执行的函数 */ /* scope: 作用范围 */ 、、/* preserveOrder: 是否保持脚本顺序 */ Load: function(fileList, callback, scope, preserveOrder) { var scope = scope || this, //var scope=this,//默认作用范围是当前页面 head = document.getElementsByTagName("head")[0], fragment = document.createDocumentFragment(), numFiles = fileList.length, loadedFiles = 0; // Loads a particular file from the fileList by index. This is used when preserving order var loadFileIndex = function(index) { head.appendChild( Common.srcLoader.buildScriptTag(fileList[index], onFileLoaded) ); }; /** * 调用回调函数,当所有文件都加载完后调用 */ var onFileLoaded = function() { loadedFiles++; //如果当前文件是最后一个要加载的文件,则调用回调函数,否则加载下一个文件 if (numFiles == loadedFiles && typeof callback == 'function') { callback.call(scope); } else { if (preserveOrder === true) { loadFileIndex(loadedFiles); } } }; if (preserveOrder === true) { loadFileIndex.call(this, 0); } else { for (var i = 0, len = fileList.length; i < len; i++) { fragment.appendChild(this.buildScriptTag(fileList[i], onFileLoaded)); } head.appendChild(fragment); } }, //构造javascript和link 标签 buildScriptTag: function(filename, callback) { var exten = filename.substr(filename.lastIndexOf('.') + 1); if (exten == 'js') { var script = document.createElement('script'); script.type = "text/javascript"; script.src = filename; //IE has a different way of handling <script> loads, so we need to check for it here if (script.readyState) { script.onreadystatechange = function() { if (script.readyState == "loaded" || script.readyState == "complete") { script.onreadystatechange = null; callback(); } }; } else { script.onload = callback; } return script; } if (exten == 'css') { var style = document.createElement('link'); style.rel = 'stylesheet'; style.type = 'text/css'; style.href = filename; callback(); return style; } } }
使用:在页面上使用
引用以上脚本是必须的让后在页面上加入 类似的代码:
<script type="text/javascript">//根据需要加载js文件,并设置回调函数Common.srcLoader.Load(['../js/jquery.js','../js/ext-base.js','../js/ext-all.js','../js/ext_ux.js','../js/FBaseFunc.js','../js/FBaseJQueryFunc.js','../js/FBaseExtFunc.js','js/SchoolGradeTestCountDrillable.js','../js/lovcombo.js','../RptService/amchart/swfobject.js'],loadPage,null,true);//回调函数function loadPage() {//设置全局相对路径gRPath = "../"target = "amcharts_1302230008081";reportID = "1";userID = "1";Ext.onReady(function() {//设置Cookie操作对象Ext.state.Manager.setProvider(new Ext.state.CookieProvider());//标题区域var oleTitleInfo = new Ext.BoxComponent({ el: 'div_func_title', height: 50, region: "north" });DoSomething();});}</script>[/code]
动态加载脚本最大的好处在于减少页面初始化的响应时间,避免不需要加载外部 javascript
相关文章推荐
- 动态加载css样式表和javascript脚本
- javascript中动态加载js、vbs脚本或者css样式表
- javascript中动态加载js、vbs脚本或者css样式表
- 如何运行时(动态)加载js脚本|JavaScript
- JavaScript的动态加载脚本和样式
- javascript 无阻塞脚本 ,通过dom动态加载
- 浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
- JavaScript 动态加载脚本和样式
- 动态加载外部 css和javascript脚本 文件
- javascript性能提升——动态加载脚本
- 动态加载脚本提升javascript性能
- JavaScript 动态加载脚本和样式的方法
- JavaScript--动态加载脚本和样式(23)
- 【JavaScript】动态加载脚本和样式
- 浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
- 如何实现从服务器端向页面动态加载JavaScript脚本?
- 动态加载脚本提升javascript性能
- 性能优越的网站必备:JavaScript之动态加载脚本
- javascript笔记--(第二十三章)动态加载脚本和样式
- 第一百一十八节,JavaScript,动态加载脚本和样式