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