我正在尝试安装H5BP( https://github.com/h5bp/html5-boilerplate/blob/v4.3.0/doc/extend.md)的extend.md文件中标识的Google Analytics扩充程序

它声明“优化的”谷歌分析JS片段包括以下代码:

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是用于将跟踪信标推送到旧版Google Analytics(GA)版本的数组.但HTML5 BoilerPlate(H5BP)在您最近使用的最新版本中已经更新,以利用Universal Analytics(UA),这是Google发布的下一个GA版本.这可以从协议相关网址//www.google-analytics.com/analytics.js以及最新版本的文档中看到.遗憾的是,似乎 doc you mentioned尚未更新,因为H5BP为优化GA代码的 source提供的链接本身已使用 UA的代码进行更新,这就是H5BP源正在使用的内容.

因此,扩展使用_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}

希望有所帮助!

总结

以上是DEVMAX为你收集整理的javascript – 如何扩展谷歌分析以跟踪AJAX等(根据H5BP文档)全部内容。

如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

javascript – 如何扩展谷歌分析以跟踪AJAX等(根据H5BP文档)的更多相关文章

  1. 应用程序关闭时的iOS任务

    我正在构建一个应用程序,通过ajax将文件上传到服务器.问题是用户很可能有时不会有互联网连接,并且客户希望在用户重新连接时安排ajax调用.这可能是用户在离线时安排文件上传并关闭应用程序.应用程序关闭时可以进行ajax调用吗?

  2. Android谷歌分析显示俄罗斯访问,甚至没有在任何设备上安装应用程序

    Android谷歌分析显示俄罗斯访问,甚至没有在任何设备上安装应用程序我试图创建一个Android应用程序,并在几天前添加了分析,然后我根本没有使用该应用程序,奇怪的是它显示来自俄罗斯的所有来自同一地区的一些访问和相同的服务提供商是垃圾邮件还是其他任何东西服务提供商解决方法引荐垃圾邮件是一种常见的事情,人们会将引荐来源设置为其网站,从而为您的GoogleAnalytics媒体资源产生虚假流量.对于

  3. android – Phonegap本地构建 – jquery ajax错误:readystate 0 responsetext status 0 statustext error

    解决方法您是否在索引文件中包含了内容安全元标记?

  4. Ajax简单的异步交互及Ajax原生编写

    一提到异步交互大家就会说ajax,仿佛ajax这个技术已经成为了异步交互的代名词.那下面将研究ajax的核心对象

  5. Ajax跨域问题的解决办法汇总(推荐)

    本文给大家分享多种方法解决Ajax跨域问题,非常不错具有参考借鉴价值,感兴趣的朋友一起学习吧

  6. ajax编写简单的登录页面

    这篇文章主要为大家详细介绍了ajax编写简单登录页面的具体代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  7. ajax从JSP传递对象数组到后台的方法

    今天小编就为大家分享一篇ajax从JSP传递对象数组到后台的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  8. 解决ajax返回验证的时候总是弹出error错误的方法

    这篇文章主要介绍了解决ajax返回验证的时候总是弹出error错误的方法,感兴趣的小伙伴们可以参考一下

  9. 使用AJAX完成用户名是否存在异步校验

    这篇文章主要介绍了使用AJAX完成用户名是否存在异步校验的相关资料,需要的朋友可以参考下

  10. ajax实现无刷新省市县三级联动

    这篇文章主要为大家详细介绍了ajax实现无刷新省市县三级联动的相关资料,利用三层架构实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部