`
随影清风
  • 浏览: 39358 次
  • 性别: Icon_minigender_1
  • 来自: 福州
文章分类
社区版块
存档分类
最新评论

动态加载JS文件(支持各种浏览器)

阅读更多
   我是一个喜欢偷懒的程序员,什么事情都想能封装就封装,能系统自动做就自动做,所以咯,为了这个目的,最近开始写一套自己的框架。
    首先,我开始了JS框架的编写:为了让页面打开的时候,系统就自动的去填充一些数据,比如 select(获取这个select的数据,后台代码已经写好,在web容器一开始的时候就去获取数据,然后放在缓存当中,以后只要从这个缓存读取就可以了) 等,所以我开始了写这个功能
          1、我写了一个common.js文件,这里面的功能都是系统自动会去执行的方法,这个文件里面会自动的去页面查找我指定的元素,然后通过ajax去后台查我要的select数据,返回。
          2、 再写一个util.js文件,这个文件里面放着JS工具方法,当然,填充select的方法也放在这里面,写这个文件的目的是为了不单系统可以自动调用这里面的方法,也可以让开发者手动去使用这里面的方法。

        写好这些功能后,我又希望开发者只要在页面上导入 common.js就可以了,而不要再手动去导入util.js 等其他文件,所以我就必须在common.js中动态的去加载util.js文件。一开始我是这么写的: document.write("<script type='text/javascript' src='"+_webInfPath+"/js/util.js'</script>");  (变量_webInfPath是工程的web-inf路径,值也是动态获取的,这里不多解释读取方式,各人有各人的方法)。结果出问题了,加载util.js文件后,马上去执行里面的方法,结果就出错了。调试了半天不明白,上网查了下原因,才发现原来document.write这种加载JS文件的方法竟然是异步的。。也就是说,我在加载util.JS文件的时候还没加载完就去调用里面的方法,当然出错了。

      好吧,知道了出错的原因,和同事讨论了一下,想办法改成同步调用就没问题了,可是没结果,不知道怎么做。。不久之后突然灵光一闪(拖最近在用jquery的福),突然想到了,jquery的 append 这个方法,然后就把代码改成了$(document).append("<script type='text/javascript' src='"+_webInfPath+"/js/util.js'</script>"); OK,问题解决了。。
 
       哈哈,那个兴奋。。
       其实这方面的解决办法网络上也是有的(虽然查到了,但是我没有试验,太麻烦了) ,而且还存在浏览器兼容的问题。。。 我这里使用了jquery的append方法,不仅解决了异步的问题,还解决了浏览器的兼容问题,而且代码还简单。。
       呵呵。。。继续编写我自己的框架了。。
       我是一个爱偷懒的程序员。。
       再来补充一下吧,由于个人当心我的表达能力不好,看的人不明白我写什么,所以这里附上我写的部分代码来表达我的意思。。

首先HTML文件部分代码:
        <script type="text/javascript" src="./js/jquery-1.4.2.js"></script>
       <script type="text/javascript" src="./js/common.js"></script>

     <select id="ts1" jselect="ts1"></select><!-- 下拉框使用 -->

然后是common.js部分代码:
var _webInfPath = "" ;  //工程上下文web-inf路径


//初始页面
$(document).ready(function(){
_webInfPath = getWebRootPath(); //获取工程上下文路径
$(document).append("<script type='text/javascript' src='"+_webInfPath+"/js/util.js'</script>");
JSelect(); //下拉框填值
}
);

//获取项目跟路径
function getWebRootPath(){
var path = location.href ;
var pathArr = path.split("/");
return pathArr[0]+"//"+pathArr[2]+"/"+pathArr[3] ;
}

//下拉框填值
function JSelect(){
$.each($("select"),function(){
var jqueryObj = $(this) ;
var jselect = $(this).attr("jselect") ;
$.ajax({
url: _webInfPath+"/servlet/ajaxServlet.do" ,   //(这里的ajaxServlet其实是我写的一个公共的servlet,效果和struts一样,通过配置后,会自动执行action里面的方法)
data:{"method":"getJselect","act":"glob","jselect":jselect },
type: "post" ,
async : "true" ,
dataType : "json",
success : function(result){
fillSelect(result,jqueryObj.attr("id"));
}
});
});
}

然后是util.js文件的部分代码:
//-------------------------------------下拉框begin---------------------
/**
*填充下拉框供调用
*   jsonArr : 存放JselectVo对象的JOSN数组
*   selectId : selectID
*/
function fillSelect(jsonArr,selectId){
if(jsonArr==null || jsonArr.length==0){
return false ;
}
var content = "" ;
$.each(jsonArr,function(){
content += jselect_addOption(this);
});
$("#"+selectId).append(content);
}

//拼装option
function jselect_addOption(_option){
var arr = new Array() ;
arr.push("<option value='" + _option.value+"'>");
arr.push(_option.name);
arr.push("</option>");
return arr.join("");
}
//-------------------------------------下拉框end---------------------
 
写完。。


     最后的最后,补充一下,其实这也是我长久一来一直想说的:
     大家发一些心得在网络上,希望看的人是抱着一种互相学习的心态来看这些内容的,而不是去批评什么“这是垃圾,这种东西很无聊”之类的话。如果你有更好的意见,可以回帖,有需要改进的地方请提出来,你有疑问也可以问,但是请不要出现侮辱别人的词语出现。。我们都是在互相学习中前进的。。
分享到:
评论

相关推荐

    动态加载外部JS文件

    动态加载则改变了这一模式,它使用JavaScript代码来异步请求并插入外部脚本,使得页面可以先呈现基本内容,而JavaScript文件则在后台加载,提高了用户体验。 二、动态加载的方法 1. 使用`&lt;script&gt;`标签的`async`和...

    javascript函数动态加载javascript文件

    这正是"javascript函数动态加载javascript文件"这一主题的核心所在。 动态加载JavaScript文件的基本原理是利用`&lt;script&gt;`标签的异步加载特性或者使用`XMLHttpRequest`或`fetch` API来创建HTTP请求获取JS文件。下面...

    动态加载JS文件和CSS文件,多浏览器支持。

    动态加载JS文件和CSS文件,多浏览器支持。多个JS文件同时加载,加载完成后执行回调方法。 使用方法: var loader=new RemoteLoader(); loader.loadFiles(["yy.js","jj.jus"],作用域);

    vue动态加载js.zip

    Vue动态加载JS是一种实现这一需求的技术,它允许我们在运行时根据需要加载JavaScript文件。本文将深入探讨Vue动态加载JavaScript的原理、方法以及其实现步骤。 首先,我们需要理解Vue动态加载的核心概念。在HTML中...

    vue动态加载外部依赖js代码实现

    - 本案例中,我们将通过创建一个名为`myScript.vue`的组件来封装动态加载JS文件的功能,使得该功能可以方便地被其他模块引用。 2. **动态加载JS文件的实现** - 在浏览器环境中,可以通过创建`&lt;script&gt;`标签并动态...

    动态加载Css 浏览器判断

    在提供的压缩包文件中,`Browes 判断.asp`和`Browes 浏览器判断.asp`可能是用于服务器端进行浏览器检测的ASP文件,而`CheckBr(动态加载Css).js`可能是用于客户端JavaScript动态加载CSS并进行浏览器判断的脚本。...

    单页面的js文件动态加载组件

    js文件动态加载是通过JavaScript代码在需要时按需加载外部JavaScript文件的一种技术。这样可以减少初始页面加载时间,提高用户体验,因为不是所有的代码都在页面加载时就需要执行。有几种常见的方法可以实现动态加载...

    JS动态加载库

    1. **兼容性问题**:确保动态加载库支持各种浏览器,特别是老版本的IE。 2. **错误处理**:添加适当的错误处理机制,防止脚本加载失败导致程序崩溃。 3. **脚本依赖关系**:确保正确处理脚本之间的依赖关系,防止...

    基于Ajax的动态JavaScript文件加载模型.pdf

    本文提出的基于Ajax的动态JavaScript文件加载模型可以有效地解决浏览器端加载JavaScript文件的问题,提高浏览器端的性能,减少网络流量,并保护服务端的JavaScript代码。该模型可以应用于各种基于B/S模式的系统中,...

    jsloader 异步加载js文件

    `JSLoader`就是这样一种工具,它允许开发者在JSP页面中异步地加载JS文件,提高页面性能。 ### 异步加载的优势 1. **提升性能**:异步加载可以确保页面主体内容先加载,用户可以更快地看到页面内容,提升用户体验。...

    动态加载JavaScript文件的两种方法_.docx

    动态加载JavaScript文件是提高网页性能和优化用户体验的重要技术。它允许网页在需要时按需加载脚本,避免一次性加载大量资源导致页面加载速度减慢。本文将详细介绍两种常见的动态加载JavaScript文件的方法,并讨论...

    同步加载JS文件Demo

    1. **动态`&lt;script&gt;`元素**:在"init.js"中,可以动态创建`&lt;script&gt;`元素,并设置其`src`属性为要加载的JavaScript文件。然后将这个元素插入到DOM中,浏览器会自动开始下载并执行该脚本。 2. **利用模块系统**:...

    如何动态加载外部Javascript文件

    在这篇文章中,作者提供了一个名为JsLoader.js的JavaScript文件,用于实现动态加载的功能。这个文件定义了一个MiniSite对象,其中包含了Browser和JsLoader两个属性。Browser用于检测当前浏览器的类型,而JsLoader则...

    使用javaScript动态加载Js文件和Css文件

    动态加载Js和CSS文件的方法在开发中非常实用,尤其是当页面需要根据用户的操作来切换主题或者实现模块化的功能时。比如,在一个允许用户更换主题的Web应用中,动态加载CSS文件可以让用户选择不同的主题,而无需重新...

    浏览器查看PDF文件(JS)

    "浏览器查看PDF文件(JS)"这个主题,就是关于如何使用JavaScript技术,特别是jQuery库,在网页中实现这一功能的探讨。JavaScript作为浏览器端的主要脚本语言,使得开发者能够创建交互性强、用户体验良好的Web应用。...

    threejs加载obj文件

    在本示例中,"ceshi03"可能是一个包含了HTML、CSS、JavaScript文件以及OBJ模型文件的测试目录。确保所有资源文件都在正确的位置,并且模型文件路径正确无误,下载后直接运行相关HTML文件即可查看加载的效果。 **四...

    Extjs3动态加载js源码

    总的来说,`Extjs3动态加载js源码`实现的动态加载管理器是一个巧妙地结合了JavaScript语言特性、浏览器API和模块化思想的解决方案。通过理解和学习这样的代码,开发者可以更好地理解如何在没有内置支持的情况下实现...

    html5.js文件,在head部分引用该文件,使各种浏览器支持html5

    HTML5.js 文件是一种JavaScript库,它的主要目的是为了在不支持HTML5新特性的老旧浏览器中模拟或模拟实现这些特性,从而使得网站可以充分利用HTML5的新功能,提高用户体验并保持跨浏览器的一致性。这个文件通常在...

    JS获取浏览器语言动态加载JS文件示例代码

    综上所述,使用JavaScript根据浏览器语言动态加载JS文件,可以有效支持多语言网站的本地化需求。开发者可以通过获取Navigator对象的browserLanguage或language属性来检测用户的语言偏好,并据此加载相应的语言包。这...

    web浏览器在线阅读pdf文件js包

    PDFObject 是一个轻量级的JavaScript库,专门用于在Web浏览器中嵌入PDF文件,使得用户可以在不离开当前页面的情况下在线阅读PDF文档。这个库的主要优势在于其简单易用和良好的浏览器兼容性,尽管在一些老旧版本的IE...

Global site tag (gtag.js) - Google Analytics