摘要:如果支持,直接從獲取當(dāng)前腳本運(yùn)行的地址如果不支持則遍歷文檔所有的標(biāo)簽,判斷哪個(gè)標(biāo)簽的為,則說(shuō)明此標(biāo)簽的屬性為當(dāng)前腳本運(yùn)行的地址。需要的注意的是只有支持,和均不支持。
起因
在閱讀layUI的源代碼關(guān)于加載遠(yuǎn)程腳本的代碼中出現(xiàn)了判斷當(dāng)前js腳本地址的代碼,其中出現(xiàn)了對(duì)于document.currentScript支持與不支持時(shí),會(huì)走不同的邏輯。
如果支持document.currentScript,直接從document.currentScript.src獲取當(dāng)前腳本運(yùn)行的地址;
如果不支持document.currentScript,則遍歷文檔所有的標(biāo)簽,判斷哪個(gè)標(biāo)簽的readyState為"interactive",則說(shuō)明此標(biāo)簽的src屬性為當(dāng)前腳本運(yùn)行的地址。
//獲取layui所在目錄 getPath = function () { var jsPath = doc.currentScript ? doc.currentScript.src : function () { var js = doc.scripts , last = js.length - 1 , src; for (var i = last;i > 0;i--) { if (js[i].readyState === "interactive") { src = js[i].src; break; } } return src || js[last].src; }(); return jsPath.substring(0, jsPath.lastIndexOf("/") + 1); }()為什么要進(jìn)行這種判斷?
首先讓我們看一下Document.currentScript的瀏覽器支持情況,具體如下圖:
由圖可見(jiàn)IE瀏覽器在Document.currentScript的支持上全線(xiàn)陣亡,那在IE瀏覽器上如何獲取當(dāng)前腳本的地址呢?原來(lái)IE的標(biāo)簽對(duì)象支持一個(gè)readyState的屬性,其屬性值與Document.readyState一樣,loading表示正在加載,interactive表示當(dāng)前處于互動(dòng)狀態(tài)(也就是正在運(yùn)行),complete表示腳本已經(jīng)加載完成。我們可以利用readyState是否為interactive來(lái)判斷某個(gè)標(biāo)簽為當(dāng)前運(yùn)行代碼所在的位置。
需要的注意的是HTMLScriptElement.prototype.readyState只有IE支持,Chrome和Firefox均不支持。
根據(jù)上述原理,對(duì)于Document.currentScript的polyfill實(shí)現(xiàn),其實(shí)就是基于HTMLScriptElement.prototype.readyState來(lái)實(shí)現(xiàn)的,具體可閱讀https://github.com/JamesMGree... 的具體實(shí)現(xiàn)。
相關(guān)文檔Document.currentScript: https://developer.mozilla.org...
Document.readyState: https://developer.mozilla.org...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/53393.html
摘要:如果支持,直接從獲取當(dāng)前腳本運(yùn)行的地址如果不支持則遍歷文檔所有的標(biāo)簽,判斷哪個(gè)標(biāo)簽的為,則說(shuō)明此標(biāo)簽的屬性為當(dāng)前腳本運(yùn)行的地址。需要的注意的是只有支持,和均不支持。 起因 在閱讀layUI的源代碼關(guān)于加載遠(yuǎn)程腳本的代碼中出現(xiàn)了判斷當(dāng)前js腳本地址的代碼,其中出現(xiàn)了對(duì)于document.currentScript支持與不支持時(shí),會(huì)走不同的邏輯。如果支持document.currentSc...
摘要:相關(guān)最大的特性就在于直接操縱網(wǎng)頁(yè)上的節(jié)點(diǎn),從而實(shí)現(xiàn)網(wǎng)頁(yè)的局部刷新而非全局刷新。該回調(diào)函數(shù)會(huì)在送回響應(yīng)的時(shí)候被調(diào)用。當(dāng)然了,如果瀏覽器不支持對(duì)象,會(huì)返回,在這時(shí)需要進(jìn)行額外的處理。 前言 馬上就要參加一個(gè)團(tuán)隊(duì)項(xiàng)目進(jìn)行React的前端開(kāi)發(fā)了。最近正在著手熟練React語(yǔ)法,然后發(fā)現(xiàn)本質(zhì)上還是建立在對(duì)javascript的深刻理解上。市面上在js基礎(chǔ)上封裝出了非常多優(yōu)秀的車(chē)輪,其中最被新手廣...
摘要:本文簡(jiǎn)單介紹與安全相同的響應(yīng)頭部,內(nèi)容整理自。參數(shù)參數(shù)說(shuō)明指定的時(shí)間秒范圍內(nèi)瀏覽器總是使用來(lái)訪問(wèn)可選參數(shù),是否同時(shí)應(yīng)用于當(dāng)前域名的所有子域名示例是一種防止網(wǎng)站被攻擊者使用錯(cuò)誤發(fā)布或其他欺詐性證書(shū)冒充安全證書(shū)的安全機(jī)制。 本文簡(jiǎn)單介紹與安全相同的 HTTP 響應(yīng)頭部,內(nèi)容整理自《OWASP Secure Headers Project》。 HTTP Strict Transport Se...
摘要:優(yōu)化需要一個(gè)多維的方法。的規(guī)范允許省略屬性組中的最后一個(gè)分號(hào)。省略提高性能的一個(gè)簡(jiǎn)單方法是使用標(biāo)準(zhǔn)的一個(gè)特性。在運(yùn)行它如果你希望將產(chǎn)品集成到中,請(qǐng)?jiān)L問(wèn)。維護(hù)不良的存儲(chǔ)庫(kù)包含一組包裝器文件和。 showImg(https://segmentfault.com/img/bVbpTsK?w=970&h=545); 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來(lái)篇優(yōu)質(zhì)文章等著你! 這是 W...
摘要:優(yōu)化需要一個(gè)多維的方法。的規(guī)范允許省略屬性組中的最后一個(gè)分號(hào)。省略提高性能的一個(gè)簡(jiǎn)單方法是使用標(biāo)準(zhǔn)的一個(gè)特性。在運(yùn)行它如果你希望將產(chǎn)品集成到中,請(qǐng)?jiān)L問(wèn)。維護(hù)不良的存儲(chǔ)庫(kù)包含一組包裝器文件和。 showImg(https://segmentfault.com/img/bVbpTsK?w=970&h=545); 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來(lái)篇優(yōu)質(zhì)文章等著你! 這是 W...
閱讀 2766·2021-11-24 09:39
閱讀 1657·2021-09-28 09:35
閱讀 1129·2021-09-06 15:02
閱讀 1324·2021-07-25 21:37
閱讀 2737·2019-08-30 15:53
閱讀 3656·2019-08-30 14:07
閱讀 724·2019-08-30 11:07
閱讀 3530·2019-08-29 18:36