JS獲取當(dāng)前腳本文件的絕對(duì)路徑
當(dāng)寫模塊加載器時(shí),獲取當(dāng)前腳本文件的絕對(duì)路徑作為基礎(chǔ)路徑是必不可少的一步,下面我們一起來探討一下這個(gè)問題吧!
一、各大瀏覽器的實(shí)現(xiàn)方式
[a]. Chrome和FF
超簡(jiǎn)單的一句足矣!
var getCurrAbsPath = function(){ return document.currentScript.src; };
這里利用了對(duì)象 document.currentScript ,它返回的是當(dāng)前執(zhí)行的script元素;然后調(diào)用script元素的src屬性即可獲取腳本文件的絕對(duì)路徑。
[b]. IE10+、Safari和Opera9
利用Error對(duì)象的stack屬性(IE10+)、sourceURL屬性(Safari)和stacktrace屬性(Opera9)萃取絕對(duì)路徑
var getCurrAbsPath = function(){ var a = {}, stack; try{ a.b(); } catch(e){ stack = e.stack || e.sourceURL || e.stacktrace; } var rExtractUri = /(?:http|https|file):\/\/.*?\/.+?.js/, absPath = rExtractUri.exec(stack); return absPath[0] || ''; };
[C]. IE5.5~9
遍歷文檔中的script標(biāo)簽
var getCurrAbsPath = function(){ var scripts = document.scripts; var isLt8 = ('' + document.querySelector).indexOf('[native code]') === -1; for (var i = scripts.length - 1, script; script = scripts[i--];){ if (script.readyState === 'interative'){ return isLt8 ? script.getAttribute('src', 4) : script.src; } } };
二、相關(guān)知識(shí)介紹
IE5.5~9下script的readyState表示該script元素的狀態(tài),分別有以下的狀態(tài)值:
uninitialized:未初始化
loading:正在加載
loaded:加載完成
interative:執(zhí)行中
complete:執(zhí)行完
可通過訂閱onreadystatechange事件來監(jiān)聽script元素狀態(tài)的變化。但不幸的是loaded和complete狀態(tài)并出現(xiàn)順序不定且有可能僅出現(xiàn)其中一個(gè),因此建議在動(dòng)態(tài)添加script元素時(shí),先設(shè)置src屬性后再將script元素添加到DOM樹中,這樣loaded和complete狀態(tài)僅會(huì)出現(xiàn)其中一個(gè)(雖然每次請(qǐng)求時(shí),哪個(gè)出現(xiàn)是不定的),比較好監(jiān)測(cè)。
三、IE和FF下的另一種方式
通過訂閱 window.onerror 事件,事件處理函數(shù)將接受三個(gè)參數(shù),分別是msg,url和num。這里url就是當(dāng)前腳本的絕對(duì)路徑了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
js 動(dòng)態(tài)生成json對(duì)象、時(shí)時(shí)更新json對(duì)象的方法
下面小編就為大家?guī)硪黄猨s 動(dòng)態(tài)生成json對(duì)象、時(shí)時(shí)更新json對(duì)象的方法。小編覺的挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12javascript定時(shí)變換圖片實(shí)例代碼
javascript定時(shí)變換圖片實(shí)例代碼,需要的朋友可以參考一下2013-03-03javaScript(JS)替換節(jié)點(diǎn)實(shí)現(xiàn)思路介紹
獲取要替換的節(jié)點(diǎn),這種方法只適用于IE瀏覽器以及適用于各種瀏覽器的寫法,感興趣的朋友可以參考下哈2013-04-04Bootstrap Fileinput 4.4.7文件上傳實(shí)例詳解
這篇文章主要為大家詳細(xì)介紹了Bootstrap Fileinput 4.4.7文件上傳實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07Dropzone.js實(shí)現(xiàn)文件拖拽上傳功能(附源碼下載)
dropzone.js是重量輕的JavaScript庫(kù),將HTML元素設(shè)置為一個(gè)降落區(qū),并通過Ajax文件被上傳到服務(wù)器。本文給大家詳細(xì)介紹Dropzone.js實(shí)現(xiàn)文件拖拽上傳功能,需要的朋友參考下吧2016-11-11詳解JavaScript的計(jì)時(shí)器和按鈕效果設(shè)置
這篇文章主要為大家介紹了JavaScript的計(jì)時(shí)器和按鈕效果設(shè)置,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2021-12-12JS基于開關(guān)思想實(shí)現(xiàn)的數(shù)組去重功能【案例】
這篇文章主要介紹了JS基于開關(guān)思想實(shí)現(xiàn)的數(shù)組去重功能,簡(jiǎn)單分析了開關(guān)思想的原理,并結(jié)合具體實(shí)例形式分析了javascript基于開關(guān)思想實(shí)現(xiàn)數(shù)組去重相關(guān)操作技巧,需要的朋友可以參考下2019-02-02