現在のJavascriptスクリプトファイルのパスの取得

2485 ワード

現在のJavascriptスクリプトファイルのパスの取得
現在のJavascriptスクリプトファイルのパスを取得するには、書き込みモジュールローダやログ記録など、特定のシーンで必要になる場合があります.すべてのブラウザに適用される統一的な方法はありませんが、本稿ではいくつかの状況に分けて説明します.
(1). 标题:document.CurrentScriptオブジェクトのsrc属性はFirefox 4+,Chrome 29+,Opera 16+,Safari 8+に適用する.
var src = document.currentScript.src;

(2). Errorオブジェクトのstack属性から抽出するファイルパスは、IE 10+,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はIE 9-に適用する.IE 9以下のブラウザでは、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)を作成して処理した.