使用谷歌分析来跟踪AJAX请求



我正在改变一个网站的很大一部分使用jQuery地址的深度链接AJAX功能。我使用像mysite.com/#!/page1/subpage/这样的uri。

我读了很多关于使用_gaq.push()功能跟踪流量的文章,但我想知道是否可以用更传统的方式来做……

每个AJAX请求调用一个PHP函数,该函数构建一个页面并在<HTML>包装器中返回它,这使我可以轻松定义自定义页面标题等。

如果我把分析代码放在那个页面上,jQuery调用那个页面会触发它来跟踪访问吗?

你可以使用jQuery的AJAX事件来全局监听AJAX请求,然后将索引推送到_gaq数组(这似乎是最可维护的方法):

$(document).on('ajaxComplete', function (event, request, settings) {
    _gaq.push(['_trackPageview', settings.url]);
});

注意,.on()在jQuery 1.7中是新的,在本例中与.bind()相同。

还请注意,我还没有测试全局AJAX事件传递的参数的内容。

您也可以使用$.globalEval()来解析加载在AJAX响应体中的脚本:http://api.jquery.com/jquery.globalEval/

success: function(data) {
    var dom = $(data);
    dom.filter('script').each(function(){
        $.globalEval(this.text || this.textContent || this.innerHTML || '');
    });
    $('#mydiv').html(dom.find('#something').html());
}

来源:jQuery - HTML中的脚本标签由jQuery解析而不执行

其他答案已经过时了(截至2013年)-谷歌建议使用他们的新通用分析

你可以像这样异步跟踪页面浏览量:

ga('send', 'pageview', '/my-page');

见:https://developers.google.com/analytics/devguides/collection/analyticsjs/pages覆盖

我使用的系统包括请求html作为纯文本,首先解析html以将所有脚本标记更改为div,分离这些div,附加页面,然后循环通过div(实际上是脚本)并将其内容附加到脚本标记或在该div上创建带有src的脚本标记。这与history.js框架示例非常相似。

$.get(urlToLoad).promise().done(function(html) {
    var outHTML = html;
    outHTML = outHTML.replace(/<script/ig, "<div class='iscript'").replace(/</script/ig, '</script');
    outHTML = $(outHTML);
    var scripts = outHTML.filter('div.iscript').detach();
    $content.html(outHTML);
    scripts.each(function() {
      var $this = $(this), s = document.createElement("script");
      if ($this.attr('src') != "") {
        s.src = $this.attr('src');
      } else {
        s.nodeValue = $this.text();
      }
      $content[0].appendChild(s); // jquery's append removes script tags
    });
}).always(function() {
    $contentclone.replaceWith($content);
    $content.slideDown();
    $contentclone.remove();
});
使用此方法,您可以添加在每个页面上执行跟踪的脚本。我个人更喜欢在全局页面上使用类似Jasper建议的方式。

最新更新