js加載之使用DOM方法動(dòng)態(tài)加載Javascript文件
更新時(shí)間:2013年11月08日 11:50:52 作者:
傳統(tǒng)上,加載Javascript文件都是使用script標(biāo)簽,我們也可以使用DOM方法,動(dòng)態(tài)加載Javascript文件,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下
傳統(tǒng)上,加載Javascript文件都是使用<script>標(biāo)簽。
就像下面這樣:
<script type="text/javascript" src="example.js"></script>
<script>標(biāo)簽很方便,只要加入網(wǎng)頁,瀏覽器就會(huì)讀取并運(yùn)行。但是,它存在一些嚴(yán)重的缺陷。
?。?)嚴(yán)格的讀取順序。由于瀏覽器按照<script>在網(wǎng)頁中出現(xiàn)的順序,讀取Javascript文件,然后立即運(yùn)行,導(dǎo)致在多個(gè)文件互相依賴的情況下,依賴性最小的文件必須放在最前面,依賴性最大的文件必須放在最后面,否則代碼會(huì)報(bào)錯(cuò)。
?。?)性能問題。瀏覽器采用"同步模式"加載<script>標(biāo)簽,也就是說,頁面會(huì)"堵塞"(blocking),等待javascript文件加載完成,然后再運(yùn)行后面的HTML代碼。當(dāng)存在多個(gè)<script>標(biāo)簽時(shí),瀏覽器無法同時(shí)讀取,必須讀取完一個(gè)再去讀取另一個(gè),造成讀取時(shí)間大大延長,頁面響應(yīng)緩慢。
為了解決這些問題,可以使用DOM方法,動(dòng)態(tài)加載Javascript文件。
function loadScript(url){
var script = document.createElement("script");
script.type = "text/javascript";
script.src = url;
document.body.appendChild(script);
}
這樣做的原理是,瀏覽器即時(shí)創(chuàng)造出一個(gè)<script>標(biāo)簽,然后"異步"讀取Javascript文件。這樣不會(huì)造成頁面堵塞,但會(huì)造成另外一個(gè)問題:這樣加載的Javascript文件,不在原始的DOM結(jié)構(gòu)之中,因此在DOM-ready(DOMContentLoaded)事件和window.onload事件中指定的回調(diào)函數(shù)對它無效。
就像下面這樣:
<script type="text/javascript" src="example.js"></script>

<script>標(biāo)簽很方便,只要加入網(wǎng)頁,瀏覽器就會(huì)讀取并運(yùn)行。但是,它存在一些嚴(yán)重的缺陷。
?。?)嚴(yán)格的讀取順序。由于瀏覽器按照<script>在網(wǎng)頁中出現(xiàn)的順序,讀取Javascript文件,然后立即運(yùn)行,導(dǎo)致在多個(gè)文件互相依賴的情況下,依賴性最小的文件必須放在最前面,依賴性最大的文件必須放在最后面,否則代碼會(huì)報(bào)錯(cuò)。
?。?)性能問題。瀏覽器采用"同步模式"加載<script>標(biāo)簽,也就是說,頁面會(huì)"堵塞"(blocking),等待javascript文件加載完成,然后再運(yùn)行后面的HTML代碼。當(dāng)存在多個(gè)<script>標(biāo)簽時(shí),瀏覽器無法同時(shí)讀取,必須讀取完一個(gè)再去讀取另一個(gè),造成讀取時(shí)間大大延長,頁面響應(yīng)緩慢。
為了解決這些問題,可以使用DOM方法,動(dòng)態(tài)加載Javascript文件。
復(fù)制代碼 代碼如下:
function loadScript(url){
var script = document.createElement("script");
script.type = "text/javascript";
script.src = url;
document.body.appendChild(script);
}
這樣做的原理是,瀏覽器即時(shí)創(chuàng)造出一個(gè)<script>標(biāo)簽,然后"異步"讀取Javascript文件。這樣不會(huì)造成頁面堵塞,但會(huì)造成另外一個(gè)問題:這樣加載的Javascript文件,不在原始的DOM結(jié)構(gòu)之中,因此在DOM-ready(DOMContentLoaded)事件和window.onload事件中指定的回調(diào)函數(shù)對它無效。
相關(guān)文章
JavaScript禁止復(fù)制與粘貼的實(shí)現(xiàn)代碼
下面小編就為大家?guī)硪黄狫avaScript禁止復(fù)制與粘貼的實(shí)現(xiàn)代碼。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨小編過來看看吧2016-05-05使用Taro實(shí)現(xiàn)小程序商城的購物車功能模塊的實(shí)例代碼
這篇文章主要介紹了使用Taro實(shí)現(xiàn)的小程序商城的購物車功能模塊,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06javascript中常見的3種信息提示框(alert,prompt,confirm)
2012-09-09mpvue微信小程序的接口請求fly全局?jǐn)r截代碼實(shí)例
這篇文章主要介紹了mpvue微信小程序的接口請求fly全局?jǐn)r截代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11JavaScript 組件之旅(四):測試 JavaScript 組件
本期,我們要討論的話題是 JavaScript 的測試,以檢查組件的狀態(tài)和工作方式是否符合預(yù)期,還會(huì)介紹一個(gè)可以方便編寫測試用例的測試方法。這里說的測試當(dāng)然是使用自動(dòng)化的測試手段,這是軟件質(zhì)量保證(QA)的重要環(huán)節(jié)。2009-10-10javascript實(shí)現(xiàn)簡單的鼠標(biāo)拖動(dòng)效果實(shí)例
這篇文章主要介紹了javascript實(shí)現(xiàn)簡單的鼠標(biāo)拖動(dòng)效果,實(shí)例分析了javascript鼠標(biāo)拖動(dòng)效果的相關(guān)要點(diǎn)與實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04