2017-08-21 12 views
0

私は自己実行匿名関数内にカスタムJavaScriptを書き込もうとしています。このカスタムjavascriptは、Googleアナリティクスライブラリの読み込み時に作成されるグローバルGoogle Analytics ga関数と対話する必要があります。ページの一番下に自己実行匿名関数のJavascript google analytics

<script> 
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
    })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 

    ga('create', 'UA-XXXXXXXX-X', 'auto'); 
</script> 

、ロードされているJavaScriptの私のカスタム:次のコードは、ライブラリをロードするページの<head>です。これはコードです:

(function($, MutationObserver, shippingMethods, ga) { 

    function triggerPageview(path) { 
     ga('send', 'pageview', path); 
    } 

})(jQuery, MutationObserver, shippingMethods, ga); 

私が探しているのは、現在のコードがページビューを正常に起動しないことです。私はこのように、引数からGAを削除した場合、ページビューにのみトリガされます:

(function($, MutationObserver, shippingMethods) { 

    function triggerPageview(path) { 
     ga('send', 'pageview', path); 
    } 

})(jQuery, MutationObserver, shippingMethods); 

作品上記のコードで、最初の例にはありません。私は、これは自分自身で実行されている無名関数に対するこれらの議論がどのように働くはずであると誤解していると仮定しています。自己実行機能が実行されると、外部Google Analyticsライブラリが読み込まれる前に、gaの値がある値になっていると思います。しかし、私はライブラリがロードされた後、gaが更新され、私の関数内のgaも更新されると考えました。これは本当ですか?

ページビューがトリガーされる前に私が最初に渡されたgaで、比較するために、gaの値をログに記録:このログ

(function($, MutationObserver, shippingMethods, ga) { 

    function triggerPageview(path) { 
     console.log(ga); 
     ga('send', 'pageview', path); 
    } 

})(jQuery, MutationObserver, shippingMethods, ga); 

ƒ(){ 
    (i[r].q=i[r].q||[]).push(arguments)} 

を次にga引数なし:

(function($, MutationObserver, shippingMethods) { 

    function triggerPageview(path) { 
     console.log(ga); 
     ga('send', 'pageview', path); 
    } 

})(jQuery, MutationObserver, shippingMethods); 

このログには:

私は間違いなく誤解しているようです。誰かがここで何が起こっているのか説明できますか?私が見せているように、カスタムコード内のグローバルを参照する「適切な」方法は何ですか?私は私の関数にgaを渡すとき

、それはgaの現在値の「コピー」を作るのではなく、グローバルga変数を参照していますか?

答えて

0

私は自分の質問に答えたと思います。私が間違っているなら、私を修正しますが、ここではドキュメントに基づいて:

https://developers.google.com/analytics/devguides/collection/analyticsjs/how-analyticsjs-works

私はGoogle Analyticsは、ライブラリのロード後gaコマンドを再定義していると思います。したがって、私の関数は元々定義されたgaメソッドを参照しますが、グローバルgaは再定義されています。この場合、ga引数を渡さないのが最善で、代わりに常にwindow.gaを参照するのが最善のようです。

関連する問題