1。グローバル変数を利用します
Google AdSenseのように、これは最も簡単な方法です:
コードコピーは次のとおりです。
<script type = "text/javascript"> google_ad_client = 'pub-3741595817388494'; </script> <script type = "text/javascript" src = "http://pagead2。googlesyndication.com/pagead/show_ads.js"> </script>
欠点は、グローバル変数が導入されることです。ファイルを導入する方法の他に2つのバリエーションがあります。
//バリエーション1:document.writeを使用して出力<スクリプトタイプ= "text/javascript"> google_ga_id = 'g6u7un8646xx'; document.write(unescape( '%3cscript type = "text/javascript" src = "http://www.google-analytics.com/ga.js"%3e%3c/script%3e')); </script> //バリエーション2:domを使用してhead <script type = "text/javascript"> g_beacon_atp = 'category =&userid =&channel = 112ad_id ='; document.getElementsByTagname( 'head')[0] .appendChild(document。CreateElement( 'Script')).src = 'http://taobao.com/atp.js'; </script> //注:上記のコードは、実際のアプリケーションに基づく仮想デモコードです
注:品種1は何度も使用されており、一般的なライティング方法は次のとおりです。
<script type = "text/javascript"> // ESAST直接:document.write( '<script/javascript "src =" test.js "> </script>'); //またはYahoo!のようにホームページ:document.write( '<scr'+'ipt type = "text/javascript" src = "test.js"> </sc+' ipt> '); </script>
2。スクリプト要素のSRCを取得して解析します
すべての変数と比較して、次のようなパラメーターを渡すことを好みます。
<script type = "text/javascript" src = "test.js?a = b&c = d"> </scrip>
コアの問題は、SRC属性を取得する方法です。
最初の方法は、スクリプトにID属性を追加し、IDを介して現在のスクリプトを取得し、通常のスクリプトを取得してSRCからパラメーターを削除することです。欠点は、HTML 4.01仕様では、スクリプト要素にID属性がないことです。この欠点は欠点とは見なされませんが、結局のところ、基準を信じるよりも基準を持たない方が良いでしょう。
2番目の方法は、JSファイル名をフックとして使用することです。 JSコードでdocument.getElementsByTagname( 'Script')を渡した後、現在のJSファイルは定期的に一致します。この方法は正統派ですが、一意のファイル名が必要です。欠点は、多くのコードがあり、洗練されていないことであり、パフォーマンスにわずかな影響を与えることです。
方法3は、方法1に基づいてカスタム属性データを追加することです。
<script id = "testscript" type = "text/javascript" src = "test.js" data = "a = b&c = d"> </script>
test.jsファイルで、次の行を使用して、渡されたパラメーターを取得します。
var scriptargs = document.getElementById( 'testscript')。getAttribute( 'data');方法4は、JSのシーケンシャル実行メカニズムを使用することです(JSファイルのロードは同期または非同期になりますが、実行する場合は、ドキュメントストリームで順序で実行する必要があります)。特定のJSファイルが実行されると、「ロードされた」JSファイルの最後のファイルでなければなりません。
var scripts = document.getElementsByTagname( 'Script'); var currentscript = scripts [scripts.length -1];方法4は、方法2よりも賢くて天才です。
コードの簡素化とパフォーマンスの観点から、方法3>方法1>方法4>方法2
概要:標準を非常に気にかけている場合は、方法4をお勧めします。私のような標準に完全に準拠する必要がないと思われる場合は、方法3をお勧めします。
テストプログラムを作成します
<!doctype html> <html> <script src = "a2.js"> </script> <script src = "a2.js"> </scrip> <script src = "a2.js"> </scrip> <script src = "a2.js"> </html> </html> <
A2.js
var scripts = document.getElementsByTagname( 'Script'); var currentscript = scripts.length; alert(currentscript);
個別に印刷します
1 2 3
3。インスピレーションプラン
あなたが私のようなジョン・レシグの忠実なファンなら、昨年8月に議論された「劣化したスクリプトタグ」をまだ覚えているかもしれません。ジョン・レシグは私たちのために想像上の扉を開きます。この記事の質問については、次の「邪悪な道」を使用してそれを達成することもできます。
<script type = "text/javascript" src = "test.js"> tb.someapp.scriptargs = 'a = b&c = d'; </script>
test.jsファイル:
tb = {}; tb.someapp = {}; var scripts = document.getElementsByTagname( "Script"); eval(scripts [scripts.length -1] .innerhtml);これにより、tb.someapp.scriptargs変数にパラメーターが保存されます。
多くのパラメーターがない場合は、これを行うことさえできます。
<script type = "text/javascript" src = "test.js"> a = d </scrip>
JSファイル:
var scripts = document.getElementsByTagname( "Script"); var scriptargs = scripts [scripts.length -1] .innerhtml.replace(/[s]/g、 '');
想像力は無限です。また、オンロードを使用することもできます。
<script type = "text/javascript" src = "test.js" onload = "tb.somefun( 'a = b&c = d')"> </script>
JSファイルの関数を定義するだけです。
tb = {}; tb.somefun = function(arg){// code};上記のコードは、非IEブラウザで正しく実行できます。愚かなIEのために、いくつかのコードを追加する必要があります。
if(window.activexobject){var scripts = document.getElementsByTagname( 'Script'); eval(scripts [scripts.length -1] .getattribute( 'onload'));}