我試圖在自執行的匿名函數內寫入一些自定義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
變量?