0

我是一名数字分析师,正在尝试学习 Javascript,尤其是我们的组织现在使用 Google 跟踪代码管理器。

今天早上,我的网站设置为跟踪某些出站链接(点击应用商店)作为事件。自定义 HTML 是:

  <script type="text/javascript"> 

$(document).ready(function(){ 

    $('.app-cta a').click(function(){ 
        dataLayer.push({ 'event':'GAevent', 'eventCategory':'App', 'eventAction':'Click to App Store', 'eventLabel':'iOS' }) 
    }); 

});

</script>

但是有一个问题(显然很常见),当一个人点击退出链接时,浏览器在 Javascript 有时间将参数传递给 Google Analytics 之前点击了新站点。建议的解决方法是添加 500 毫秒的延迟,因此:

<script type="text/javascript"> 

setTimeout(function(){
$(document).ready(function(){ 

    $('.app-cta a').click(function(){ 
        dataLayer.push({ 'event':'GAevent', 'eventCategory':'App', 'eventAction':'Click to App Store', 'eventLabel':'iOS' }) 
    }); 

});
},500);

</script>

这让我感觉很棒,因为这是我第二次或第三次使用 Javascript。

然后我想大胆一点。我想让代码“更整洁”,并尝试从分析函数中创建一个变量,然后针对该变量运行 setTimeout 方法。这是我尝试过的:

<script type="text/javascript"> 

setTimeout(function(){track_app},500);


var track_app = $(document).ready(function(){ 

    $('.app-cta a').click(function(){ 
        dataLayer.push({ 'event':'GAevent', 'eventCategory':'App', 'eventAction':'Click to App Store', 'eventLabel':'iOS' }) 
    }); 

});


</script>

我意识到这必须看起来非常基本,但如果有人能指出为什么最后一次尝试没有奏效,我将不胜感激?我最初的尝试(这是有效的,我可以很容易地恢复)是向分析功能添加 500 毫秒延迟的“最简洁”方式吗?集成 setTimout 方法的最佳方法是什么?

4

3 回答 3

1

你几乎做到了;track_app必须是一个完整的函数,而不仅仅是函数体

var track_app = function () {
        $(document).ready(function () {
            $('.app-cta a').click(function () { 
                dataLayer.push({'event': 'GAevent', 'eventCategory': 'App', 'eventAction': 'Click to App Store', 'eventLabel': 'iOS'});
            });
        });
    };

setTimeout(track_app, 500);
于 2013-08-11T19:23:32.880 回答
1

您基本上是在执行的函数上设置超时,即函数track_app的返回值.ready()(无论是什么),而不是函数本身。

这就是为什么您的代码的第二次迭代不像第一次那样表现。您可以将其更改为:

setTimeout(track_app,500);

var track_app = function () {
    $(document).ready(function(){ 
        $('.app-cta a').click(function(){ 
            dataLayer.push({ 'event':'GAevent', 'eventCategory':'App', 'eventAction':'Click to App Store', 'eventLabel':'iOS' }) 
        }); 
    });
});

编辑:保罗打败了我!

于 2013-08-11T19:31:37.317 回答
0
$('.app-cta a').on('click', function (event) {
    event.preventDefault();

    //do your Google Analytics stuff here

    var href = $(this).closest('a').attr('href');
    setTimeout(function () {
        window.location = href;
    }, 500);
});

以上是我的想法,但想法是当有人单击链接时,您会阻止浏览器自然地跟随链接(即 preventDefault 方法调用)。一旦您停止浏览器跟踪链接,您就可以执行 GA 操作,然后设置超时以将浏览器导航到链接的 href 属性。

我不太了解 GA,但如果那里没有处理这种情况的东西,我不会感到惊讶 - 即浏览器在 JS 可以执行之前跟随链接。

于 2013-08-11T20:29:46.533 回答