擷取當前Javascript指令檔的路徑,javascript指令碼

來源:互聯網
上載者:User

擷取當前Javascript指令檔的路徑,javascript指令碼
擷取當前Javascript指令檔的路徑

擷取當前Javascript指令檔的路徑,在特定情境下可能需要,比如寫模組載入器,或者進行日誌記錄。並沒有統一的方法適用於所有瀏覽器,本文分幾種情況進行說明。

(1). 標準做法: document.currentScript 對象的src屬性
適用於Firefox 4+, Chrome 29+, Opera 16+, Safari 8+.

var src = document.currentScript.src;

(2). 從Error對象的stack屬性中提取檔案路徑
適用於IE10+, Safari 7-, Opera 15-.

var e = new Error('err');var stack = e.stack || e.sourceURL || e.stacktrace || '';var rgx = /(?:http|https|file):\/\/.*?\/.+?.js/, var src = (rgx.exec(stack)||[])[0] || '';

如果瀏覽器不支援Error建構函式,也可以通過try…catch來擷取一個Error對象。

監聽onerror事件,來對Error對象處理,原理也是如此。onerror事件的回呼函數的第2個參數就是src. 代碼就不貼了。

(3). 找document.scripts集合中的最後一個script元素的src
適用於指令碼載入過程中執行的情況,不適用於指令碼初始化完成後的調用。對瀏覽器沒有要求。

var src = document.scripts[document.scripts.length - 1].src;

(4).尋找document.scripts集合中readyState屬性為interative的script元素的src
適用於IE9-. IE9以下瀏覽器中,script.readyState屬性為interative表示指令碼正在執行。

var scripts = document.scripts, src;for (var i = scripts.length - 1; i>=0; i--){    if (scripts[i].readyState === 'interative'){        src = scripts[i].src;        break;    }}

本文只是提供思路分析,如果需要在產品中使用,需要處理各種適用情形的判斷。有人製作了一個JS函數(getCurrAbsPath.js)來處理。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.