2011-01-18 36 views
0

私たちのサービスでは、ページ上のJavaScriptをいくつかドロップしてトラッキングデータを表示する機能を提供していますが、同じページに埋め込みコードの複数のインスタンスを埋め込むことができます。同じページで同じJavaScript変数を使用するにはどうすればよいですか?

今、問題は、ページに同じ変数名を含めることができないということです。例えば

:彼らは再びそれを埋め込むことができるようにしたい場合

<script type="text/javascript"> 
    var ttp_number = "1Z8E26R80281495993"; // Tracking number 

    var ttp_key="123456"; 
    (function(){ 
    document.write('<div id="ttp"></div>'); 
    s=document.createElement('script'); 
    s.type="text/javascript"; 
    s.src="http://c.trackthepack.com/j/e?" + Math.random(); 
    setTimeout("document.getElementById('ttp').appendChild(s);",1); 
    })() 
</script> 

その後、私はすべての変数名を変更する必要があると思います:

<script type="text/javascript"> 
    var ttp_number_001 = "446888240962"; // Tracking number 

    var ttp_key_001="123456"; 
    (function(){ 
    document.write('<div id="ttp_001"></div>'); 
    s_001=document.createElement('script'); 
    s_001.type="text/javascript"; 
    s_001.src="http://c.trackthepack.com/j/e?" + Math.random(); 
    setTimeout("document.getElementById('ttp_001').appendChild(s_001);",1); 
    })() 
</script> 

私はそれらを有する大丈夫function()ブロックの内容を変更しますが、ttp_numberttp_keyは同じ変数名のままにする必要があります。

今、ページに複数の埋め込みコードがある場合、それらはすべて最後の埋め込みコードの変数の内容を継承します。

ここでの究極の質問...どうすれば修正できますか?

+0

なぜ 'setTimeout'ですか?それがなければ、セマンティクスをブロックすることができ、望むものは期待どおりに動作します。 –

+1

考え方は、この方法でコードを埋め込むことで、サーバーがダウン/スロー/その他の場合にページの読み込みが遅くならないようにすることです。 – Shpigford

+0

'ttp_number'と' ttp_key'変数はどのように利用されていますか?編集:心配しないで、私は返されているスクリプトでそれらを参照してください。 – user113716

答えて

2

代わりに、代わりにttp_keyとttp_numberを配列に格納しますか?

+1

まあ私はGoogle Adsenseがそれをどうやっているのだろうかと思う。つまり、同じページに12個のものを埋め込むことができ、干渉しないことになりますが、カスタマイズ可能な変数がこのように設定されています。 – Shpigford

0

Math.random()でキャッシュバストするのはなぜですか? http://c.trackthepack.com/j/eのJavaScriptが頻繁に変更されますか?そうでない場合は、キャッシュにそのジョブをさせる必要があります。

しかし、もしそうなら、あなたはhttp://c.trackthepack.com/j/e?n=446888240962&k=123456をロードするように、代わりにグローバルwindowオブジェクトを介してそれらを中継する、それはと呼ばれています、引数を検査し、直接これらの引数を使用するのに十分な、それが動的に作ることができ、それを見てする必要はありません。スクリプトが実行されたときにそれらを上げますか?

1

なぜ関数本体に変数​​を宣言しないのですか?それから彼らはその機能にのみスコープされています。スクリプトをHTMLにダンプするときに、それらを異なる値に設定することはできます。

私は、ユーザーが(何らかの理由で)機能を編集できることを暗示していることは知っていますが、それはちょうど私に傷つく世界のように思えるので、実際にはそうではないと思います。

+0

関数が終了すると、変数はスコープから外れてしまい、スクリプトを注入する 'setTimeout'のOPの使用のために、スクリプトファイルにアクセスできなくなります。 –

+0

Roatin、私はsetTimeoutがここの問題だとは思わない。私はテストでそれを削除して、それはまだ動作しません。 – Shpigford

+0

@Shpigford:あなたはあなたが正しいものを知っています。スクリプトを挿入するために使用しているDOMメソッド( '.appendChild(...)')が、 'setTimeout'に関係なく、スクリプトを非同期的にロードすることに気付きました。私の間違い。 –

関連する問題