2012-11-07 27 views
31

私はmain.jsという名前のjavascriptファイルを持っています。 main.jsインサイド現在のjavascriptファイル名の絶対パスを取得する方法

私は、この現在のファイルの絶対パスを取得したい、のようなもの:

http://server/app/main.js 

http://server/app/script/main.js 

絶対パスを取得するための最速の方法は何ですか?あなたはそのsrc属性にアクセスすることができます返さscripts配列の各要素について

var scripts = document.getElementsByTagName("script"); 

答えて

37

あなたは、スクリプトのコレクションを調べることができます。

現在実行中のインクルードファイルは、常にscriptsアレイの最後のファイルになります。したがって、scripts[scripts.length-1]にアクセスできます。

もちろん、これは最初のコード実行時にのみ機能し、初期スクリプトがロードされた後に呼び出される関数内では役に立ちません。後で使用できる値が必要な場合は、保存する必要があります変数に変換する。

+0

おかげで、これは、私たちは複数のファイルが含まれている場合 – hguser

+0

が、それは動作します何をしたいです...各jsファイルはどのようにそれが自分のsrcパスであることを示しますか? – xxbinxx

+0

あなたは 'scripts'配列の中から望むスクリプトを得る別の手段を使いたいかもしれないことに注意してください。私はこの方法を使用していますが、Firefoxで頻繁に使用されるようなレポートを作成しています(blegh ...)私のロジックがその要素の配列を取得するまでに読み込まれた別のスクリプトがあります。 スマートなことは、最後の3分の1のようにつかみ、それらをループして、あなたが探しているファイル名のものを見つけることです。 –

21

が下Apacheのディレクトリにこれを入れてjavascriptのファイル

の現在のパス名を取得する:あなたは、現在のスクリプトを探している場合

、本サイトに記載された方法を試してみてください/ tmpを呼び出してtest.htmlとします。 URLをご覧ください

localhost/grader/test.html?blah=2#foobar 

Javascriptを:

<html> 
<script> 
    alert(location.pathname); // /tmp/test.html 
    alert(location.hostname); // localhost 
    alert(location.search); // ?blah=2 
    alert(document.URL);  // http://localhost/tmp/test.html?blah=2#foobar 
    alert(location.href);  // http://localhost/tmp/test.html?blah=2#foobar 
    alert(location.protocol); // http: 
    alert(location.host);  // localhost 
    alert(location.origin); // http://localhost 
    alert(location.hash);  // #foobar 
</script>        
</html> 

場所の属性に関するさらに詳しい情報:​​

それとも、jQueryの持っている場合:

<html> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"> 
</script> 
    $(location).attr('href');  // http://localhost/tmp/test.html?blah=2#foobar 
    $(location).attr('pathname'); // /tmp/test.html 
</script> 
</html> 
1

をこれは動作します。ただし、スクリプトのファイル名を知っている必要があります。しかし、ほとんどの状況でそれを知っているでしょう。

function absFileLoc(filename) { 
    var scriptElements = document.getElementsByTagName('script'); 
    for (var i = 0; i < scriptElements.length; i++) { 
    var source = scriptElements[i].src; 
    if (source.indexOf(filename) > -1) { 
     var location = source.substring(0, source.indexOf(filename)) + filename; 
     return location; 
    } 
    } 
    return false; 
} 
+0

ここには、cssファイルの絶対的な場所を取得する関数があります。 https://gist.github.com/jamrizzi/44bac4240057b4a89a2d918d05680e3d – jamrizzi

-2

あなたは現在のファイル名やディレクトリ

location.href.split('/')[ location.href.split('/').length - 1 ];

+0

location.hrefは、現在実行中のjavascriptファイルではなく、現在のWebページのURLを取得します。 – CpnCrunch

+0

最初にURLを取得し、分割して目的の部分を取得します。 location.href.split( '/')[0]; //最初の部分を取得する location.href.split( '/')[location.href.split( '/')。length - 1]; //ファイル名を取得します – Amr

+0

いいえ、それは間違っています。現在のjavascriptファイルではなく、ページのURLを取得しています。そのjavascriptコードをwww.ab.com/page.htmlに含まれているwww.abc.com/file.jsファイルに入れると、location.hrefはwww.def.com/page.htmlを返します。質問は、javascriptファイルの名前(www.abc.com/file.js)を取得する方法を尋ねることです。 – CpnCrunch

0

を取得したい場合、IEはまだ提供していないので、私は、これは古い質問ですけど、まだ実際にこれを試してみてくださいスクリプトsrc。

私はスクリプトタグに一意のID与えることだった最高の形:私が使用してスクリプト内

<script id="kuvaScript" src="jscripts/kuva/kuva.min.js"></script> 

を:それはあるよう

var thisScript = $("#kuvaScript").attr("src"); 
    var thisPath = thisScript.split('/').slice(0, -1).join('/')+'/'; 

それは相対的(SRCフォーマットを維持しますか完了)、IEとChromeでテストされました。

多くの時間を節約できることを願っています。

0

非常に簡単では* .jsファイルを使用して、パスを取得したいファイルにこれを入れて:

let scripts = document.getElementsByTagName('script') 
let lastScript = scripts[scripts.length -1] 
console.log('lastScript', lastScript.src) 
関連する問題