js 文件引入实现代码 |
本文标签:js,文件引入 也不好麻烦让他们从新写一个方法,由于他们都引用了这个AA.js文件,想在这边在AA.js后执行一个函数自动把jq库引入,于是想到引入js文件方法: 复制代码 代码如下: getScript : function(s,call){ var el = UI.DC(script); if (call) { el.onload =el.onreadystatechange=call; } UI.A(el,type,text/javascript); UI.A(el,src,s); UI.GT(document,head)[0].appendChild(el); } /*UI.DC为创建对象,UI.A为属性赋值,GT为getElementsByTagName的简写*/ 于是这样执行UI.getScript("js/jquery/jquery-1.4.2.min.js",function(){alert("载入成功")}); 结果在IE和ff下确实弹出了载入成功,可当我再HTML中使用jq的时候在IE下怎么都执行不了,不断刷新偶尔还能执行,放在服务器上和在客户端的静态页面也有差别,但在火狐下没有问题......... 于是想到是不是jq文件在载入的时候和html载入是并行的,当jq载入成功之前HTML文件已经执行,于是在html的body结束之时添加 复制代码 代码如下: <script> alert("html前执行") </script> 执行发现确实是先弹出hmtl前执行,后弹出载入成功 。在火狐下也是这样 。上传到服务器上时感觉火狐的弹出会同时出现..... 于是开始不解,到底怎么设置才能确保jq文件载入完之后才能执行html body中的东东,怎么像在head中添加<script type="text/javascript" src="js/jquery.js"></script>那样引入文件.. 思索总想到以前浏览一个页面是他用了一个loading文件引入许多js文件,在html中就可使用这些引入的文件函数,搜索查到了这个js文件内容为: 复制代码 代码如下: var Collapsar = { Version: 0.0.1, require: function(libraryName) { // inserting via DOM fails in Safari 2.0, so brute force approach document.write(<script type="text/javascript" src="+libraryName+"></script>); }, load: function() { if((typeof Prototype==undefined) || (typeof Element == undefined) || (typeof Element.Methods==undefined) || parseFloat(Prototype.Version.split(".")[0] + "." + Prototype.Version.split(".")[1]) < 1.5) throw("The Prototype JavaScript framework 1.5.0+ is required"); $A(document.getElementsByTagName("script")).findAll( function(s) { return (s.src && s.src.match(/loader\.js(\?.*)?$/)) }).each( function(s) { var path = s.src.replace(/loader\.js(\?.*)?$/,); var includes = s.src.match(/\?.*load=([a-z,]*)/); (includes ? includes[1] : "").split(,).each( function(include) { Collapsar.require(path+include+.js) }); }); } } Collapsar.load(); 调用的时候为<script type="text/javascript" src="js/loder.js?load=jquery,...,..."></script>这样等号后面的文件都可引入,其实是这句在关键的作用 document.write(<script type="text/javascript" src="+libraryName+"></script>); 刚看到有些疑惑write方法不是像文档内添加内容吗,内容应该在body标签中出现啊,实验发现如果是字符串确实出现在文档内,当如是script link等标签就出现在了head内;那在head中添加引用js文件难道和直接在head中一样载入他们之后才执行body中的内容....他载入和上面添加script有什么区别啊........ 实验:在AA.js中添加: UI.getsc=(function(){ document.write(<script type="text/javascript" src="js/jquery/jquery-1.4.2.min.js"></script>); })() 让他自动执行,在body的第一行就引入jq的方法,实验确实成功了,在IE和在ff一样都可执行; 有时间继续实验................... |