我正在改变一个网站的很大一部分使用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建议的方式。