JS獲取當(dāng)前腳本文件的絕對(duì)路徑
來源:易賢網(wǎng) 閱讀:876 次 日期:2016-08-02 16:19:56
溫馨提示:易賢網(wǎng)小編為您整理了“JS獲取當(dāng)前腳本文件的絕對(duì)路徑”,方便廣大網(wǎng)友查閱!

當(dāng)寫模塊加載器時(shí),獲取當(dāng)前腳本文件的絕對(duì)路徑作為基礎(chǔ)路徑是必不可少的一步,下面我們一起來探討一下這個(gè)問題吧!

一、各大瀏覽器的實(shí)現(xiàn)方式                

[a]. Chrome和FF

超簡單的一句足矣!

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)測。

三、IE和FF下的另一種方式                

通過訂閱 window.onerror 事件,事件處理函數(shù)將接受三個(gè)參數(shù),分別是msg,url和num。這里url就是當(dāng)前腳本的絕對(duì)路徑了。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:JS獲取當(dāng)前腳本文件的絕對(duì)路徑
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65317125(9:00—18:00) 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)