使用Google Analytics跟踪AJAX请求

5
我正在将一个网站的大部分内容更改为使用jQuery地址的深链接AJAX功能。我正在使用像mysite.com/#!/page1/subpage/这样的URI。
我已经阅读了关于使用_gaq.push()函数跟踪流量的好文章,但我想知道是否有可能以更传统的方式进行...
每个AJAX请求都调用一个PHP函数来构建页面并在<HTML>包装器中返回它,这使我可以轻松定义自定义页面标题等。
如果我将分析代码放在该页面上,那么jQuery调用该页面会触发分析器跟踪访问吗?
3个回答

16

你可以使用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 - script tags in the HTML are parsed out by jQuery and not executed


5

有什么不同?您可以随时调用 _gaq.push(['_trackPageview'])... - Jasper

2

我使用一种系统,该系统涉及将HTML请求为纯文本,首先解析HTML以将所有脚本标签更改为div,然后分离这些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建议的方式来进行操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接