使用GA等参数调用异步JS

时间:2015-12-21 20:22:13

标签: javascript api asynchronous google-analytics

我正在尝试创建客户端JS代码,它将使用一些参数调用外部JS服务器端脚本,我正在查看Google Analitycs示例,因为这正是我想要实现的,但是我真的不知道怎么做它工作......

(function(i,s,o,g,r,a,m) { 
   i['GoogleAnalyticsObject'] = r;
   i[r] = i[r] || function(){
     (i[r].q = i[r].q || []).push(arguments)
   },
   i[r].l = 1*new Date();
   a = s.createElement(o),
   m = s.getElementsByTagName(o)[0];
   a.async = 1; 
   a.src = g;
   m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');

我想知道服务器端脚本是如何解析这些元素的。我试图对http://www.google-analytics.com/analytics.js代码进行逆向工程,但是我没有得到它。

我是否可以使用显示客户端 - 服务器异步通信的相同方法找到某个简单的代码段?

1 个答案:

答案 0 :(得分:1)

此脚本根本不与服务器通信。这只是加载analytics.js库,它是实际进行跟踪的文件。

跨域边界传输数据的最简单方法是动态创建图像标记,将其指向执行处理的服务器端脚本(并返回透明的1x1图像)并附加跟踪参数。您需要跟踪用于识别重复访问者的ID并将网页浏览结合到会话中,因此您需要一些可以读取,写入和更新Cookie的功能。这是analytics.js文件的作用之一。

还有其他方式可以发送数据 - 例如,Google Analytics使用sendBeacon-method(如果有)。这样做的好处是它不会等待服务器响应(因此如果浏览器卸载文档,它将不会被取消)。但是,这并不总是可用,在这种情况下,图像请求将用作后备。

因此,将数据发送到服务器的最简单方法是创建图像网址并动态创建图像。

img = new Image(); 
img.src ="http://myserver.com?param1=foo&param2=bar";

您甚至不需要将其添加到DOM,无论如何都会发送图像。