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