使用Google Analytics跟踪所有点击的多种条件

时间:2012-03-19 19:16:32

标签: jquery google-analytics

我正在尝试跟踪点击Google Analytics的所有链接作为事件。所以我写了一些jQuery来捕获它。我刚刚开始使用jQuery,所以我不知道我是否采用最有效的方式,所以我想要一些关于如何改进代码的反馈或建议。它越简单越快越好,因为它跟踪分析。

编辑:这是最新的代码。我无法弄清楚为什么最后一个按钮和倒数第三个返回未定义的值。 http://jsfiddle.net/uqj88/

这是我到目前为止的代码:

    $(document).ready( function() {
      var pageURL = window.location.pathname;
      var linkText;

      $('a').click(function (e) {
          if ($(this).text() != ""){
                linkText = $(this).text();
          }
          else if (($(this).text() === "") && ($(this).children("img") != "") && ($(this).children("img").attr("alt") != "")) {
                linkText = $(this).children("img").attr("alt");
          }
          else if (($(this).text() === "") && ($(this).children("img") != "") && ($(this).children("img").attr("alt") === "")) {
                linkText = $(this).children("img").attr("src").split("/").pop();
          }
          _gaq.push(['_trackEvent', pageURL, 'click', linkText]);
          if (($(this).attr('target') != '_blank') || ($(this).attr('target') != '#')) {
                e.preventDefault();
                setTimeout('document.location = "' + $(this).attr('href') + '"', 150);
          }
      });
      $('button').click(function () {
          linkText = $(this).text();
          _gaq.push(['_trackEvent', pageURL, 'click', linkText]);
      });
      $("input[type='submit']").click(function () {
          if ($(this).attr("value") != ""){
                linkText = $(this).attr("value");
          }
          else if (($(this).attr("value") === "") && ($(this).prop("id") != "")) {
                linkText = $(this).prop("id");
          }
          else if (($(this).attr("value") === "") && ($(this).prop("class") != "")) {
                linkText = $(this).prop("class");
          }
          else {
                linkText = "button";  
          }
          _gaq.push(['_trackEvent', pageURL, 'click', linkText]);
      });
    });

2 个答案:

答案 0 :(得分:2)

只是一个可以为您节省一些分析问题的FYI ...... _trackPageview_trackEvent通过向Google请求跟踪像素来工作。如果您在请求有机会完成之前离开页面,您最终会得到不一致的数据。根据您无法控制的一些事情,该事件可能会或可能不会被计算在内。

处理此问题的一种方法是,如果链接未在新窗口中打开,请将链接延迟少量(本例中为150毫秒)。

$('a').click(function (e) {
    <snip>
    _gaq.push(['_trackEvent', pageURL, 'click', linkText]);
    if ($(this).attr('target') != '_blank') {
        e.preventDefault();
        setTimeout('document.location = "' + $(this).attr('href') + '"', 150);
    }
});

答案 1 :(得分:1)

我修复了你的例子。我相信在较新版本的jQuery(如1.7+)中,建议您不要使用attr方法。我使用prop方法对其进行了测试,现在可以正常运行:http://jsfiddle.net/shanabus/uqj88/3/

另外,我知道这是示例代码,但在每次使用var之前使用linkText声明似乎很奇怪,我认为这会稍微扰乱变量的范围。

希望这有帮助!