2017-08-21 94 views
0

我試圖在自執行的匿名函數內寫入一些自定義JavaScript。此自定義JavaScript需要與加載Google Analytics庫時創建的全局Google Analytics ga函數進行交互。下面的代碼是在加載庫頁的<head>自動執行匿名函數的Javascript谷歌分析

<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加載。這是代碼:

(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); 

上面的代碼工作,第一個例子沒有。我假設這是我誤解了這些自動執行匿名函數的參數應該如何工作。我猜測當執行自執行功能時,ga的值是在加載外部Google Analytics庫之前的某個值。但是,我認爲在庫加載後,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); 

此日誌:

ƒ (a){J(1);Z.D.apply(Z,[arguments])} 

所以,看來我絕對是誤解了一些東西。有人可以解釋這裏發生了什麼嗎?在我所展示的自定義代碼中引用全局的「正確」方式是什麼?

當我將ga傳入我的函數時,它是否對當前值ga進行「複製」,而不是參考全局ga變量?

回答