【问题标题】:Sending Google Analytics event then immediately navigating away发送 Google Analytics 事件,然后立即离开
【发布时间】:2013-04-02 17:44:34
【问题描述】:

我可以像这样发送 Google Analytics 事件并立即离开吗?

_gaq.push(['_trackEvent', 'foobar']);
window.location = "/";

如果 Google Analytics 在调用它时执行某种 AJAX 请求,那么无论我们是否停留在页面上,它都应该可以工作。我担心的是,它似乎有时只是将东西放入数组中以供以后处理。我认为这只会在最初发生,当时谷歌分析还没有时间初始化,但我想确定这一点。

我用 GA debug 做了一个测试,它似乎有效,但我不确定这是否意味着它总是取决于加载速度,而不是什么。

我可以这样做并且永远不会丢失任何事件吗?

【问题讨论】:

    标签: javascript google-analytics


    【解决方案1】:

    我的做法是这样的:

    _gaq.push(['_trackEvent', '...', '...', '...']);
    _gaq.push(function(){
        // do stuff here
    });
    
    $('#logo').on('click', function(){
        var curPage = window.location.href;
        _gaq.push(['_trackEvent', curPage, '#logo']);
        _gaq.push(function(){
            window.location.href = '/';
        });
    });
    

    第二个推送调用将始终在第一个推送调用之后运行,因为 Google 将所有推送调用排队,因此第一个推送调用将运行并完成,然后第二个推送调用将运行并完成。 Google 允许您将函数放入 push 方法中,以便将它们排队。

    来源:https://developers.google.com/analytics/devguides/collection/gajs/#PushingFunctions

    【讨论】:

    • 正是我想要的。谢谢!
    • 在尝试此操作时请务必进行大量测试。仅仅因为 _trackEvent _gaq.push 调用已返回并不意味着数据已被记录。在内部,有一个异步图像请求用于发送数据,您取决于在为新页面拆除页面时请求处于哪个阶段。
    • 我认为如果 _gaq.push() 确实发送了请求,那么我是否立即继续也没关系 - 因为一旦发送请求,浏览器就不需要做其他事情,是吗?除非发送跟踪时出错,但不管我是否重定向,它都可能被破坏。
    • 一旦图像请求真正发出,一切都很好——问题是浏览器何时发出请求。我认为发生的事情是 _trackEvent 发出图像请求,浏览器将其放入网络请求队列中,该队列由不同的线程处理。
    【解决方案2】:

    如果新页面没有在新窗口中打开,我会稍微延迟(通过setTimeout)。

    我还没有机会尝试这个,但是 Google 的新 Universal Analytics 有一个 hitCallback 函数,它会在数据发送后执行。

    【讨论】:

    • 哇,这太棒了,正是为此目的而制作的。非常感谢您的链接!
    【解决方案3】:

    @mike 提到了在 analytics.js 文档中描述的 hitCallback 方法:

    在某些情况下,例如当您跟踪出站链接时,您可能想知道跟踪器何时完成发送数据。这样,只有在用户的点击被报告给 Google Analytics 后,您才能将用户发送到他们的目的地。为了解决这个问题,send 命令允许您在字段名称对象中指定一个 hitCallback 函数,该函数将在 analytics.js 完成发送数据后立即执行。

    这太棒了,除了 sn-p 仍然处于公开测试阶段。如果由于某种原因(ahem 技术恐惧政策ahem)您受限于 ga.js 功能,您可以使用this workaround

    _gaq.push(['_set', 'hitCallback', function(){
      document.location='someOtherPage.html';   
    }]);
    _gaq.push(['_trackEvent', 'category', 'event', 'value']);
    

    另一个明智的建议是在未定义 _gaq 时立即执行回调。

    【讨论】:

      【解决方案4】:

      您对失去赛事的担忧似乎是合理的,请参阅this questionOne answer Google 更改代码似乎有点脆弱,但可以让您在导航到链接之前确认事件跟踪。那可能是“近乎立即的”。

      【讨论】:

        猜你喜欢
        • 2011-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多