5

我正在更改网站的很大一部分以使用 jQuery Address 的深度链接 AJAX 功能。我正在使用诸如此类mysite.com/#!/page1/subpage/的URI。

我已经阅读了很多关于使用该_gaq.push()功能跟踪流量的内容,但我想知道是否有可能以更传统的方式来做到这一点......

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

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

4

3 回答 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 - HTML 中的脚本标签被 jQuery 解析出来并且不被执行

于 2011-12-16T21:12:16.463 回答
5

其他答案已经过时(截至 2013 年)——谷歌建议使用他们新的Universal Analytics

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

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

请参阅:https ://developers.google.com/analytics/devguides/collection/analyticsjs/pages#overriding

于 2013-11-14T20:10:54.893 回答
2

我使用的系统涉及将 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 建议的方式进行操作。

于 2011-12-16T21:17:17.657 回答