作者hyderai (飘)
看板Ajax
标题Re: [ js ] .js include js档
时间Fri Jul 18 02:59:23 2008
※ 引述《wctang (wctang)》之铭言:
: ※ 引述《hyderai (飘)》之铭言:
: : 最近刚开始接触javascript
: : 我知道javascript里面没有include这种东西
: : 所以要自行撰写函式来使用
: : 网路上目前找到的,大致如下:
: : function load(path) {
: : var d = document.createElement(script);
: : d.src = path;
: : document.getElementsByTagName(body)[0].appendChild(d);
: : }
: : 不过这种方式达不到我的目标
: : 最近在网路上看到一支js应用程式(ex. a.js)是另外使用jQuery framework来撰写
: : 它是直接将jquery-1.2.6.js跟一些plugin的内容全部复制到该js档内
: : 只是我觉得这样看起来很乱,想用类似include的方式,将它们独立出来,先使用
: : 上面的function将jquery-1.2.6.js include进来後,再开始程式的撰写。
: : 不过要是用上面的function会失败,出现jQuery未定义的讯息。
: : 是因为变数scope的问题,还是其他原因?有解决方式吗?
: : js档include其他js档、css档是不是不常见,
: : 因为没有include,所以code reuse只能用复制的方式吗?
: function loadscript(jspath,loaded) {
: var s=document.createElement('script');
: s.setAttribute('type','text/javascript');
: s.setAttribute('src',jspath);
: if(loaded){
: if(s.addEventListener){
: s.addEventListener('load',loaded,false);
: }else if(document.all){
: s.onreadystatechange=function(){if(this.readyState==='loaded'){loaded();}}
: }
: }
: document.getElementsByTagName('head')[0].appendChild(s);
: }
: loadscript('http://jquery/addrss.js',function(){
: alert($);
: });
就目前找到的方法1.使用addEventListener的方式在载入多个js档方面
,好像不太方便,不过在loadscript()第二个引数函式中可以马上
使用jQuery,这里不需要另外设timer去考虑jQuery-1.2.6.js是否载入
完成的问题(?)
方法2.是使用ajax去抓想要load的多个js档,相对的必须在同一网域
才能使用,最後再使用window.eval()去执行抓回来的js就OK了,不过
我测试了一下若是载入多个js档,好像会有来不及load的情形,
所以就必须去考虑所有的js档是否已经载入完成,目前看到的无非
是使用setTimeOut 或 setInterval 周期性的去check看是不是所有的
js档都载入完毕,当然这里判断是否载入完成的条件,我想是蛮关键的地方...
网路上找到一些心得文,还蛮有帮助的
JavaScriptLoad and Execute JavaScript on Demand
author:石头成
http://blog.roodo.com/rocksaying/archives/2716520.html
这篇是利用XmlHttpRequest即ajax来实作
JavaScriptLoad and Execute JavaScript on Demand, by createElement
author:石头成
http://blog.roodo.com/rocksaying/archives/2741057.html
这篇是利用addEventListener来实作
--
ˍˍ
活出自己 ▕吞佛▏
才是此生的快意 ▕童子▏
 ̄ ̄
by godman362
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.227.140.54
1F:推 fillano:补充:ff->addEventListener,ie->attachEvent,第二个例 07/18 10:32
2F:→ fillano:子是这样做的喔,请看范例的21,22行 07/18 10:33