2017-08-02 52 views
0

我在寫一個Javascript函數,它將成爲Google跟蹤代碼管理器中的一個標記。我可以在Google跟蹤代碼管理器中觀察數據層變量的變化嗎?

它被加載到我最小控制的SPA上。

每當用戶點擊,我用的是GTM功能的一些數據推送到數據層,例如:

var someEventIsTriggered = function(e) { 
     var target = $('input#watched'); 

     // Trigger a generic "gtm.click" event on every click 
     dataLayer.push({ 
      "event": "gtm.customEvent", 
      "gtm.customWatchedVariable": target.val() 
     }); 
}; 

每到這個被觸發時,它會推一個新的事件的數據層,並更新了gtm.customWatchedVariable的值。我現在要檢查的是當前的gtm.customWatchedVariable與最後的gtm.customWatchedVariable不同,然後在GTM發生更改時觸發一個觸發器。

我該怎麼做?

回答

0

感謝@維克多leontyev,指着我對答案。

我沒有意識到你可以像對待其他數組一樣對待dataLayer對象。所以我的代碼現在看起來像這樣:

var someEventIsTriggered = function(e) { 
    var target = $('input#watched'); 
    var lastEvent = dataLayer 
         .filter(function (e) { return e.event === 'gtm.customEvent'; }) 
         .pop(); 
    var lastValue = lastEvent instanceof Object 
         ? lastEvent["gtm.customWatchedVariable"] 
         : false; 

    // Trigger a generic "gtm.click" event on every click 
    dataLayer.push({ 
     "event": "gtm.customEvent", 
     "gtm.customWatchedVariable": target.val() 
    }); 

    if (lastValue !== target.val()) { 
     // Do the thing. 
    } 

}; 

謝謝!

1

這個js是檢查是否在數據層對象最後gtm.customWatchedVariable變量是不同的:

var someEventIsTriggered = function(e) { 
    var target = $('input#watched'); 

    dataLayer.push({ 
     "event": "gtm.customEvent", 
     "gtm.customWatchedVariable": target.val() 
    }); 

    var customWatcherVar = dataLayer.filter(function(e){ return typeof(e["gtm.customWatchedVariable"]) != 'undefined';}); 
    var prevDatalayer = customWatcherVar[customWatcherVar.length-2]; 
    var newDatalayer = customWatcherVar[customWatcherVar.length-1]; 
    var prevVal = null; 
    var newVal = null; 
    if (prevDatalayer!=null) 
    { 
     prevVal = prevDatalayer["gtm.customWatchedVariable"]; 
    } 
    if (newDatalayer!=null) 
    { 
     newVal = newDatalayer["gtm.customWatchedVariable"]; 
    } 
    if (prevVal != newVal) 
    { 
     // Push another datalayer, because gtm.customWatchedVariable changed 
    } 

}; 
+0

謝謝!我沒有意識到你可以像對待一個普通的舊的Javascript數組一樣對待dataLayer。更優雅的做法是將最後一個元素推向新的元素。 – haz

+0

如果它爲你工作,你能否接受我的答案 –

相關問題