19

Web ページで実行中の JavaScript ファイルの絶対 URL を取得する汎用関数をまとめてみました。

http://gist.github.com/433486

基本的に、次のようなものを呼び出すことができます。

getScriptName(function(url) {
    console.log(url);
    // http://www.example.com/myExternalJsFile.js
});

ページ上の外部 JavaScript ファイル内で、それを使って何かを行うことができます (<script>たとえば、それをロードしたタグを見つけるなど)。

私がテストしたほぼすべてのブラウザー (Firefox、Chrome、Safari、少なくとも Opera v10、および IE 8) でうまく動作します。

ただし、IE 6 および 7 では失敗するようです。コールバック関数は実行されますが、取得された名前は JavaScript ファイルではなく、メインの HTML ページへの URL です。例を続けると、getScriptName次のパラメーターを使用してコールバックが呼び出されます。http://www.example.com/index.html

だから私が本当に求めているのは、現在の JavaScript ファイルの URL を取得する他の方法があるかどうかだけです (これは IE 6 および 7 固有のハッカーである可能性があります)。前もって感謝します!

編集:また、これはすべての場合に機能するとは限らないため、お勧めしません:

var scripts = document.getElementsByTagName("script");
return scripts[scripts.length-1].src;

動的に作成されたスクリプト タグ (ページの最後に配置されていない可能性があります)、別名遅延読み込みの場合に機能するようにしたいと思います。

4

2 に答える 2

1

申し訳ありませんが、これで苦労するかもしれません。バージョン 8 より前の IE では、通常、次の形式の JavaScript エラーからエラー メッセージが表示されます。

line: 342
char: 3
error: expected identifier, string or number
code: 0
url: http://example.com/path/to/resource

URL は、問題を含む外部 Javascript リソースの URL ではなく、window.location.href です。その時点でスクリプト URL は IE で使用できず、それを表示しようとする Javascript でも使用できないため、IE は役に立たない URL 値を与えることをお勧めします。

このバグ/機能が修正されたことを示す IE8 リリース ノートにリンクできるようにしたいので、これをコミュニティ wiki として作成しました。私の MSDN foo はかなり弱いです!

于 2011-07-04T16:19:32.517 に答える
1

これの多くは、アクセスできるものに依存します。一見すると、JS コード内でこれを完全に実行しようとしている場合、上記のいくつかの理由から、それが可能であるとは思えません。おそらく 90% は達成できますが、決定的ではありません。

dotnet 環境 (私が知っているのはこれだけです) で作業している場合は、すべての JS リクエストをインターセプトし、リクエストの場所などを追加するモジュールの使用をお勧めします。

クライアント側ではなく、サーバー側からこれに対処する必要があると思います。クライアント側から決定的な答えが得られるとは思いません。サーバー側からの回答を得ることにも苦労すると思いますが、より成功する可能性があります。

于 2011-07-04T09:38:06.570 に答える