理解Javascript文件動態(tài)加載
Javascript文件動態(tài)加載一直是比較困擾的一件事情,像網(wǎng)絡(luò)上傳的比較常見的做法:
function loadjs(fileurl){ var sct = document.createElement("script"); sct.src = fileurl; document.head.appendChild(sct); }
然后我們來測試一下結(jié)果:
<html> <head> <link rel="stylesheet" type="text/css" media="screen" /> </head> <body> <script> function loadjs(fileurl){ var sct = document.createElement("script"); sct.src = fileurl; document.head.appendChild(sct); } loadjs("http://code.jquery.com/jquery-1.12.0.js"); loadjs("http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js") loadjs("http://bootboxjs.com/bootbox.js") </script> </body> </html>
代碼加載完后,會出現(xiàn)下圖的錯誤:
jquery明明是加載在第一個處理,為什么還是報(bào)jQuery不存在的對象呢?
因?yàn)檫@樣加載,相當(dāng)于開啟了三個線程,只是jquery這個文件先啟動線程,而jquery執(zhí)行完這個線程的時(shí)間,超過了后面兩個時(shí)間. 因此后面執(zhí)行完的,可能沒能找到j(luò)query這個對象。
然這種方式怎么處理呢?
其實(shí)文件的加載是有個狀態(tài)處理的.文件的加載有個onload事件,就是可以監(jiān)聽文件是否加載完成的事件.
因此我們可以考慮這個方法來處理我們想要的結(jié)果.我們用直觀的方式來處理.改進(jìn)后的代碼如下:
<html> <head> <link rel="stylesheet" type="text/css" media="screen" /> </head> <body> <script> function loadjs(fileurl, fn){ var sct = document.createElement("script"); sct.src = fileurl; if(fn){ sct.onload = fn; } document.head.appendChild(sct); } loadjs("http://code.jquery.com/jquery-1.12.0.js",function(){ loadjs("http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js",function(){ loadjs("http://bootboxjs.com/bootbox.js") }) }); </script> </body> </html>
OK,執(zhí)行完這個代碼之后,加載文件都是在前一個加載完成后,才會加載另外一個,這樣就不會造成找不到用到的對象了.
然后我們來執(zhí)行一個彈出框的效果,代碼里面使用了 Bootbox.js 插件. 加載代碼如下:
loadjs("http://code.jquery.com/jquery-1.12.0.js",function(){ loadjs("http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js",function(){ loadjs("http://bootboxjs.com/bootbox.js",function(){ bootbox.alert("Hello world!", function() { Example.show("Hello world callback"); }); }) }) });
刷新頁面,就會直接顯示彈出框:
動態(tài)加載的代碼,往往容易在這里花費(fèi)很多時(shí)間調(diào)試.大家最好的辦法就是寫一個最簡單的例子,理解其中的原因. 這里的代碼都可以進(jìn)行封裝,還可以加入CSS文件的加載.作為自己的插件使用。
- 學(xué)習(xí)javascript文件加載優(yōu)化
- JS 動態(tài)加載js文件和css文件 同步/異步的兩種簡單方式
- JS加載器如何動態(tài)加載外部js文件
- 動態(tài)加載js、css的簡單實(shí)現(xiàn)代碼
- 動態(tài)加載js、css的實(shí)例代碼
- 動態(tài)加載js文件簡單示例
- jquery及js實(shí)現(xiàn)動態(tài)加載js文件的方法
- 如何動態(tài)加載外部Javascript文件
- js實(shí)現(xiàn)動態(tài)加載腳本的方法實(shí)例匯總
- 不使用script導(dǎo)入js文件的幾種方法
- 動態(tài)加載JavaScript文件的3種方式
相關(guān)文章
JS實(shí)現(xiàn)簡易刻度時(shí)鐘示例代碼
本篇文章主要介紹了JS實(shí)現(xiàn)簡易刻度時(shí)鐘示例代碼的資料,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2017-03-03JavaScript實(shí)現(xiàn)三級聯(lián)動菜單效果
這篇文章主要為大家詳細(xì)介紹了三級聯(lián)動菜單效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08JS數(shù)組中常用方法技巧學(xué)會進(jìn)階成為大佬
這篇文章主要為大家介紹了JS數(shù)組中常用的方法技巧,學(xué)會了你就在進(jìn)階成為大佬的道路上又邁進(jìn)了一步,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10JavaScript數(shù)據(jù)結(jié)構(gòu)之二叉查找樹的定義與表示方法
這篇文章主要介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)之二叉查找樹的定義與表示方法,簡單講述了二叉查找樹的概念、特點(diǎn)及javascript針對二叉查找樹的創(chuàng)建、插入、遍歷等操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-04-04JavaScript實(shí)現(xiàn)翻轉(zhuǎn)圖片的三種方法小結(jié)
有時(shí),我們可能需要翻轉(zhuǎn)Web應(yīng)用中的媒體元素,所以這篇文章小編為大家詳細(xì)介紹了三種使用JavaScript翻轉(zhuǎn)圖片的方法,希望對大家有所幫助2024-01-01Electron 打包問題:electron-builder 下載各種依賴出錯(推薦)
這篇文章主要介紹了Electron 打包問題:electron-builder 下載各種依賴出錯,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07