国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript按順序加載運(yùn)行js方法

2024-05-06 15:23:55
字體:
供稿:網(wǎng)友

首先如果大家對JS動態(tài)加載有不理解的地方可以參閱:

javascript動態(tài)加載實(shí)現(xiàn)方法

動態(tài)加載JS文件的三種方法

如何你的 script 上沒有任何 異步,阻塞 等標(biāo)注:

瀏覽器會異步加載 javascript 文件,但是會按照引用文件中的書寫順序從上到下執(zhí)行解析 javascript

Defer屬性標(biāo)記

defer是html4.0中定義的,該屬性使得瀏覽器能延遲腳本的執(zhí)行,等文檔完成解析完成后會按照他們在文檔出現(xiàn)順序再去下載解析。

也就是說defer屬性的 script 就類似于將 script 放在body中的加載 效果一致.

但是defer屬性在各個瀏覽器中支持程度有點(diǎn)不同,就是說,有的瀏覽器不完全支持.

Async屬性標(biāo)注

async是HTML5新增的屬性, 大部分先進(jìn)支持該屬性的.
該屬性的作用是讓腳本能異步加載,也就是說當(dāng)瀏覽器遇到async屬性的 script 時瀏覽器加載css一樣是異步加載的

javascript 動態(tài)加載js文件

原理很簡單,創(chuàng)建一個 script 節(jié)點(diǎn),給節(jié)點(diǎn)賦予 script 的屬性,然后 append 到 dom 的 head 標(biāo)簽中.

function loadJS(url){  var Script = document.createElement('script');  Script.setAttribute('src', url);  Script.setAttribute('type', 'text/javascript');  document.body.appendChild(Script);  return Script;}

如果我們同時加載多個 javascript 文件

loadJS('a.js');loadJS('b.js');

上面的效果是,a.js 和 b.js 文件會被異步同時加載,如果 b.js 文件比 a.js 文件小的話,很可能先加載執(zhí)行 b.js ,完全不會按照書寫結(jié)果加載執(zhí)行

所以,如果你的 b.js 文件有依賴 a.js 的東西,那么就會報錯,因?yàn)榻忉寛?zhí)行b.js 的時候,a.js 還在加載中.

控制javascript 加載執(zhí)行順序

我們對代碼做如下改進(jìn)

function loadJS(url, success) {      var domScript = document.createElement('script');      domScript.src = url;      success = success || function () {          };      domScript.onload = domScript.onreadystatechange = function () {        if (!this.readyState || 'loaded' === this.readyState || 'complete' === this.readyState) {          success();          this.onload = this.onreadystatechange = null;          this.parentNode.removeChild(this);        }      }      document.getElementsByTagName('head')[0].appendChild(domScript);    }

通過script 節(jié)點(diǎn)上的 onload 和 onreadystatechange 屬性來監(jiān)聽節(jié)點(diǎn) src 是否加載完成

如果成功,調(diào)用回調(diào)函數(shù) success();

我們在調(diào)用此方法的時候,可以通過 loadJS 回調(diào)函數(shù)來知道當(dāng)前節(jié)點(diǎn)已經(jīng)加載完成,然后在回調(diào)函數(shù)里繼續(xù)加載其他 script 文件

loadJS(getUrl('a.js'), function () {      loadJS(getUrl('b.js'), function () {        console.log('a.js ,b.js 加載完成');      });});            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 汕尾市| 来安县| 澄江县| 巴青县| 永春县| 沙河市| 德阳市| 卓资县| 沁阳市| 林周县| 大厂| 巴彦淖尔市| 织金县| 冀州市| 额济纳旗| 绥化市| 东乡县| 萝北县| 扶余县| 江门市| 文昌市| 济南市| 潮安县| 康保县| 蓬莱市| 遵义市| 名山县| 大同市| 邮箱| 东乌| 邵东县| 和政县| 天柱县| 浦县| 肇东市| 易门县| 淅川县| 福贡县| 五家渠市| 巴楚县| 外汇|