- var _gaq = [['_setAccount','UA-XXXXX-X'],['_trackPageview']];
并且在定义_gaq之后,应添加其他增强功能,例如跟踪jquery AJAX请求,跟踪javascript错误和跟踪页面滚动.
实际上,当前版本的H5BP中包含的片段并未将_gaq作为变量引用:
- (function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=
- function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;
- e=o.createElement(i);r=o.getElementsByTagName(i)[0];
- e.src='//www.google-analytics.com/analytics.js';
- r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));
- ga('create','UA-XXXXX-X');ga('send','pageview');
这在尝试使用任何H5BP扩展时会产生未定义的错误.例如.
- if (typeof _gaq !== "undefined" && _gaq !== null) {
- $(document).ajaxSend(function(event,xhr,settings){
- _gaq.push(['_trackPageview',settings.url]);
- });
- }
因为没有定义_gaq,所以无法正常工作.
这些增益是如何实现的?有人可以提供一个显示所有扩展的完整实现的工作示例吗?
谢谢
解决方法
因此,扩展使用_gaq对象的其他源代码将不起作用,因为您没有使用ga.js,它具有处理从GA推送到_gaq对象的数据的功能,但是用于UA的analytics.js,不初始化任何此类对象如_gaq或具有处理推送到_gaq的数据的函数.
但是,在升级自己使用analytics.js(UA)之前,H5BP有一个GA版本的脚本,就像这样(我得到了这个,由一位曾经使用过H5BP的朋友提供):
- <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->
- <script>
- var _gaq=[['_setAccount',['_trackPageview']]; //here the _gaq was initialised
- (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
- g.src='//www.google-analytics.com/ga.js';
- s.parentNode.insertBefore(g,s)}(document,'script'));
- </script>
理想情况下,这应该取代您提到的代码行,即
- (function(b,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=
- function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;
- e=o.createElement(i);r=o.getElementsByTagName(i)[0];
- e.src='//www.google-analytics.com/analytics.js';
- r.parentNode.insertBefore(e,'ga'));
- ga('create','pageview');
如果你这样做,那么你使用代码
- if (typeof _gaq !== "undefined" && _gaq !== null) {
- $(document).ajaxSend(function(event,settings){
- _gaq.push(['_trackPageview',settings.url]);
- });
- }
等等_gaq将起作用.
另外请记住,您目前正在使用的H5BP代码是最好的,因为Google正在逐步淘汰GA,以使Universal Analytics成为分析的未来.我提到的旧代码不再有效(或将在不久的将来停止工作,具体取决于Google).在UA Upgrade Center了解更多相关信息.
请记住,当前的H5BP使用UA(analytics.js)代码,这是Google提供的优化形式,如here所示.
这就解释了为什么extend.md中提到的脚本不适用于您似乎正在处理的H5BP,这是一种可能的解决方法,通过实现旧代码.您需要的是使用您现有的脚本跟踪AJAX等的方法.为此,每次AJAX请求完成时,您只需记录虚拟页面浏览量即可.您可以找到类似的情景here.在那里,提问者将跟踪应用于模态的开头.您可以应用相同的技术来跟踪AJAX调用以及页面或部分页面的检索.我在答案中指定的VURL可以是/ virtual / ajax / url-of-page-retrieval-via-ajax.
如果您不希望发送虚拟综合浏览量,您还可以为每个AJAX请求发送自定义事件.在UA here中阅读有关事件跟踪的更多信息.
如果您想知道您指定的函数的参数代表什么,您可以阅读here.这是您提到的extend.md文件中的脚本所在的位置.尝试修改脚本以便与UA一起使用可能如下所示:
- (function ($) {
- // Log all jQuery AJAX requests to Google Analytics
- $(document).ajaxSend(function(event,settings){
- ga('send','pageview',settings.url.pathname);
- });
- })(jQuery);
ajaxSend()方法是每次jQuery AJAX调用完成时触发的回调.记住jQuery这个词.这仅适用于jQuery AJAX请求. xhr通常代表XMLHttpRequest.我认为它假设一个人知道jQuery AJAX调用是什么,我对此并不是很了解.
要使用UA跟踪Javascript错误,类似的脚本将是:
- (function(window){
- var undefined,link = function (href) {
- var a = window.document.createElement('a');
- a.href = href;
- return a;
- };
- window.onerror = function (message,file,line,column) {
- var host = link(file).hostname;
- ga('send','event',(host == window.location.hostname || host == undefined || host == '' ? '' : 'external ') + 'error',message,file + ' LINE: ' + line + (column ? ' COLUMN: ' + column : ''),{'nonInteraction': 1});
- };
- }(window));
这同样收集:事件类别将是主机错误,操作将是错误消息,标签将指向错误发生的位置(行号,文件名等).
跟踪页面滚动也非常相似:
- $(function(){
- var isDuplicateScrollEvent,scrollTimeStart = new Date,$window = $(window),$document = $(document),scrollPercent;
- $window.scroll(function() {
- scrollPercent = Math.round(100 * ($window.height() + $window.scrollTop())/$document.height());
- if (scrollPercent > 90 && !isDuplicateScrollEvent) { //page scrolled to 90%
- //If you want to track for page scroll for some other percentage of scroll,you
- //can edit the number 90,or write additional conditional ga('send',...) calls
- //inside this block and vary the label accordingly,specifying the percentage
- //of scroll.
- isDuplicateScrollEvent = 1;
- ga('send','scroll','Window: ' + $window.height() + 'px; Document: ' + $document.height() + 'px; Time: ' + Math.round((new Date - scrollTimeStart )/1000,1) + 's',{'nonInteraction':1}
- );
- }
- });
- });
这里,事件类别将滚动,动作将是窗口,高度和文档,以及时间.如果您想将滚动视为交互式事件(这意味着如果您希望用户在滚动时将其作为非反弹用户进行跟踪),则可以删除该行{‘nonInteraction’:1}
希望有所帮助!