JavaScript :: 自分自身が設置されているURLを取得する

javascript内で自分自身が設置されているURLを取得する方法です。
それが出来て何がうれしいかというと、例えば下記のようにスクリプト内に画像パスが記述されている場合です。

document.write('<img src="img/001.jpg">');

この javascript を階層の深さが異なる複数のHTMLから読み込みたい場合、スクリプト内で画像パスを指定できません。
画像パスは読み込まれたHTMLからの相対パスとして扱われてしまうからです。

ただし、画像パスを / からの絶対パス や http://からの絶対URL で記述すれば可能です。
ですが、環境に依存してしまい、移植性が失われますのであまりやりたくありません。

このようなケースで、自分自身が設置されているURLを取得できれば、移植性を損なわず画像パスを記述できるようになります。
php の dirname(__FILE__) と同じようなものです。


以下、サンプルになります。


sample.js

(function(){
    var root;
    var scripts = document.getElementsByTagName("script");
    var i = scripts.length;
    while (i--) {
        var match = scripts[i].src.match(/(^|.*\/)sample\.js$/);
        if (match) {
            root = match[1];
            break;
        }
    }
    alert(root);
})();


index.html

<html>
<head>

<script type="text/javascript" src="js/sample.js"></script>

</head>
<body>

</body>
</html>


動作確認の例

http://example.com/hoge/index.html

http://example.com/hoge/js/sample.js


index.html と sample.js を設置後、ブラウザで http://example.com/hoge/index.html にアクセスすると
自分自身が設置されているURL http://example.com/hoge/js/ がアラートされます。