很多時候在一個頁面中某個操作需要用到一個js庫潦俺,但這個操作也不經(jīng)常用,所以并不想在該頁面一開始就加載這個js庫邻奠,只有當(dāng)操作時才動態(tài)加載進來阅羹。
由于瀏覽器(DOM)對象允許javascript動態(tài)創(chuàng)建任何HTML內(nèi)容,并自動根據(jù)鏈接下載內(nèi)容一罩,像<img src="..." />``<script src="...">
等杨幼,所以只需向DOM中添加<script>
內(nèi)容就好了撇簿,關(guān)鍵在于怎樣知道瀏覽器什么時候加載完js聂渊,不然我們依賴該js的代碼就會出錯,
Chrome/Firefox/safari/IE11 等在<script>
內(nèi)容加載完后會有一個load事件四瘫,我們可監(jiān)聽這一事來完成需要的相關(guān)操作
var script = document.createElement("script");
script.onload = function(){
///加載完成
}
script.src = "file.js";
document.getElementByTagName("head")[0].appendChild(script);
而IE11以下版本就不支持此事件汉嗽,但會有一個readystatechange事件:
script.readystatechange = function(){
if( script.readyState == "loaded" || script.readyState == "complete" ){
///加載完成
}
}
下面來封裝下,以方便調(diào)用:
function loadScript(url, callback){
var script = document.createElement ("script")
script.type = "text/javascript";
if (script.readyState){ //IE
script.onreadystatechange = function(){
if (script.readyState == "loaded" || script.readyState == "complete"){
script.onreadystatechange = null;
callback();
}
};
} else { //Others
script.onload = function(){
callback();
};
}
script.src = url;
document.getElementsByTagName("head")[0].appendChild(script);
}
現(xiàn)在就可以當(dāng)點擊時再加載所需js庫找蜜,但當(dāng)重復(fù)點擊時饼暑,就會重復(fù)加載,所以我們還需要一個變量記錄已動態(tài)加載的js,以防止重復(fù)加載