【问题标题】:Google Analytics: Is _gaq.push() a blocking function?Google Analytics:_gaq.push() 是阻塞函数吗?
【发布时间】:2011-04-07 18:57:52
【问题描述】:

我要做的是在向 Google Analytics 发送事件后立即将用户重定向到下一页:

_gaq.push(['_trackEvent', 'xxx' ...]);
window.location = 'some url ...';

上面的代码成功地注册了事件,因为我可以在 GA 报告中看到它们。但是我怀疑 一些 事件丢失了,因为浏览器在跟踪像素加载之前将用户重定向到新页面

我的问题是:

  1. 在事件成功到达 Google 的服务器之前,_gaq.push() 是否会阻塞?
  2. 如果没有,实现我需要的最佳方法是什么?

谢谢!

【问题讨论】:

标签: javascript google-analytics


【解决方案1】:

Google 有一个 support page 表示您可能希望在调用 _gac.push 后添加延迟,但他们声称这是为了让 Google Analytics JavaScript 有机会加载。他们并没有说这是为了确保发送请求。

首先,将出站点击延迟几分之一秒。

用户几乎不会注意到这种延迟,但它会为浏览器提供更多时间来加载跟踪代码。如果没有此方法,用户可能会在跟踪代码加载之前点击出站链接,在这种情况下,不会记录事件。

我没有检查过 @pixelfreak 声称处理 onbeforeunload 的说法,但他们似乎就是这样做的。

【讨论】:

    【解决方案2】:

    这是我根据一些快速研究得出的观察结果。该函数是 Google Analytic 的异步 API 的一部分,所以它不应该阻塞任何东西,否则,它不是异步的。 :)

    挖掘经过混淆的 ga.js,您可以看到跟踪可能被称为 onbeforeunload,当您离开页面时会触发。

    跟踪像素是否完全加载并不重要,这很容易忘记。只要请求发起并到达谷歌的服务器,它就会被跟踪。响应(在本例中为像素图像)是副产品。

    【讨论】:

    • 嗯,不是吗? 1)“push”是原生javascript,这里唯一的谷歌特定的东西是添加数据的数组的名称。并且图像请求不是副产品,它是发送给谷歌的数据。这就是为什么 Google 建议在重定向之前添加超时,或者使用 Universal Analytics 使用命中回调。
    【解决方案3】:

    也许你可以试试这个方法,但我没试过

    _gaq.push(['_trackEvent', 'xxx' ...]);
    _gaq.push(function(){location.reload()});
    

    【讨论】:

      【解决方案4】:

      只需使用 1 秒延迟。像这样:

      _gaq.push(['_trackEvent', 'xxx' ...]);
      setTimeout(function(){window.location = 'some_url'}, 1000);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-12
        • 1970-01-01
        • 2019-08-15
        • 2011-11-16
        • 1970-01-01
        • 2015-09-15
        • 2020-03-29
        • 1970-01-01
        相关资源
        最近更新 更多