36

現在実行中のJavaScriptファイル(Webページ内)のURLを判別するための簡単で信頼できる方法はありますか?

これについての私の唯一の考えは、すべてのスクリプトsrc属性についてDOMをスキャンして、現在のファイルがどのように参照されているかを見つけ、それをに適用して絶対URLを把握することdocument.locationです。誰か他のアイデアがありますが、私が完全に見落としていた非常に簡単な方法はありますか?

更新:DOMを介してアクセスされるスクリプト要素srcには、完全なURLを含むプロパティが既にあります。それがどれほどユビキタス/標準であるかはわかりませんが、代わりgetAttribute("src")に、[X]HTMLにある生の属性値を返すを使用することもできます。

4

6 に答える 6

41

これを、それが独自の URL であることを知る必要がある js ファイルに入れます。

完全な資格(例http://www.example.com/js/main.js):

var scriptSource = (function(scripts) {
    var scripts = document.getElementsByTagName('script'),
        script = scripts[scripts.length - 1];

    if (script.getAttribute.length !== undefined) {
        return script.src
    }

    return script.getAttribute('src', -1)
}());

または ソースに表示されるとおり(例/js/main.js):

var scriptSource = (function() {
    var scripts = document.getElementsByTagName('script'),
        script = scripts[scripts.length - 1];

    if (script.getAttribute.length !== undefined) {
        return script.getAttribute('src')
    }

    return script.getAttribute('src', 2)
}());

使用されているパラメーターの説明については、http://www.glennjones.net/Post/809/getAttributehrefbug.htmを参照してくださいgetAttribute(これは IE のバグです)。

于 2009-06-12T01:40:35.517 に答える
6

ソース(例/js/main.js) に表示されるように、これはクロスブラウザーです

var scriptSource = (function() 
{ 
    var scripts = document.getElementsByTagName('script'), 
        script = scripts[scripts.length - 1]; 

    //No need to perform the same test we do for the Fully Qualified
    return script.getAttribute('src', 2); //this works in all browser even in FF/Chrome/Safari
}()); 

完全な資格(例http://www.example.com/js/main.js):

いくつかのテストの後、クロスブラウザーの方法で完全に修飾されたものを取得するのは難しいようです. Crescent Fresh によって提案され たソリューションは、IE7 で機能する場合でも、IE8 で完全修飾を取得するために機能しません。

于 2010-10-05T15:24:11.413 に答える
0

これが厳密にクライアントソリューションである場合、あなたのソリューションはかなり良いと思います。

サーバーでコードを記述している場合は、おそらくdiv / hiddenフィールド/(ここにお気に入りのHTML要素を挿入)にスクリプトへの完全に解決されたURLを入力し、クライアント側のjavascriptでそれを取得できます。

于 2009-06-12T00:45:28.050 に答える
0

自分が実行していないページでどの関数(したがってどのファイル)が実行されているかを知りたい場合は、 https://addons.mozilla.org/en-US/firefox/addon/10345を参照してください。 tコントロール。

どのスクリプトが実行されているかを知りたい場合は、いくつかの方法がありますFirebugを使用すると、情報を得ることができconsole.log()ます。コードにアラートステートメントを入れるだけでも(煩わしい間)、ローテクな方法でデバッグするのに役立ちます。エラーを発生させてキャッチし、エラーのプロパティを使用して処理することもできます(https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Errorを参照) 。

しかし、なぜこれが重要なのでしょうか。スクリプトがすでにエラーを引き起こしている場合は、エラーが発生している場所を簡単に特定できます。エラーがまったく問題ではない場合、どのファイルからのものかを知ることの利点は何ですか?

于 2009-06-12T00:48:40.507 に答える