今天在群里,看有人提到动态加载JS的问题,便整理如下:
function loadJs(jsFile){
if (!jsFile) return;
var oHead = document.getElementsByTagName('HEAD')[0];
var oScript = document.createElement('script');
oScript.type = "text/javascript";
oScript.src = jsFile;
oHead.appendChild(oScript);
}
上面的代码初步地完成了一个JS文件的加载过程,调用”loadJs(指定的js文件名);”就可以加载指定的JS了。
但还不够完善,为了避免重复加载,需要进行一点小小的改动:
function loadJs(jsFile){
if (!jsFile) return;
var oScripts = document.getElementsByTagName('script');
for (var i=0; i<oScripts.length; i++){
if (oScripts[i].src.indexOf(jsFile) > -1) return;
}
var oHead = document.getElementsByTagName('HEAD')[0];
var oScript = document.createElement('script');
oScript.type = "text/javascript";
oScript.src = jsFile;
oHead.appendChild(oScript);
}
如果已经加载了该JS,就跳过下面的步骤,这样,就不会重复加载了。但这样也不是万无一失~因为如果这时候马上执行JS里的脚本的话,也许会提醒你未定义,因为该JS还未加载完成。
———————————————-
2010-03-02 更新
判断是否加载完成,区别于IE和其它浏览器,可以使用
onload事件和onreadystatechange事件来判断
ie不支持onload事件,通过onreadystatechange事件判断readyState属性是否是”loaded”或者”complete”即加载完成
其它浏览器如FF,Chrome,Safari,Opera可以通过onload事件判断是否加载完成。








