google的分析(analytics)js代码分析以及重写

相信用过google的analytics的朋友都了解其功能的强大.
由于工作需要,最近将其urchin.js的代码down了一份下来研究了一下.由于其注释很少,命名也很难读懂.研究了1个月.小有所成.将其代码重写并加上了注释.与大家一同分享.这里面将google的用户识别代码删除.
/*
=====================================
|--------AuthorByBlackSoul---------|
|------------2006.04.27--------------|
|--------BlackSoulylk@gmail.com------|
|------------QQ:9136194--------------|
|------http://blacksoul.cnblogs.cn---|
======================================
*/


//定义全局量
varur="";//来源地址
varurp=newArray();//来源参数名称
varurpv=newArray();//来源参数值
vararrayCount=0;//参数数目
pageOpen=newDate();//进入页面的时间
varreqURL="http://192.168.0.219/Analytics/";//接收数据的页面地址
varGUID=Math.round(Math.random()*2147483647);//用户唯一随机数
vartitle=document.title;//网页标题
varuexp=pageOpen.getTime()+(1000*60*60*24*30);//设置cookie过期时间既回访用户的限定
varrtu="false";//指示用户是否回访用户

//浏览器特征信息
varbrower=newArray();
/*
*brower[0]浏览器类型
*brower[1]浏览器版本
*brower[2]浏览器java是否打开1开-1关
*brower[3]浏览器flash版本
*brower[4]浏览器操作系统
*brower[5]浏览器分辨率
*brower[6]浏览器色深
*brower[7]浏览器语言
*brower[8]浏览器插件
*/

varsEn=newArray();//搜索引擎的名称
varkeyWord=newArray();//关键字传输形式
sEn[0]="google";keyWord[0]="q";
sEn[
1]="yahoo";keyWord[1]="p";
sEn[
2]="msn";keyWord[2]="q";
sEn[
3]="aol";keyWord[3]="query";
sEn[
4]="lycos";keyWord[4]="query";
sEn[
5]="ask";keyWord[5]="q";
sEn[
6]="altavista";keyWord[6]="q";
sEn[
7]="search";keyWord[7]="q";
sEn[
8]="netscape";keyWord[8]="query";
sEn[
9]="earthlink";keyWord[9]="q";
sEn[
10]="cnn";keyWord[10]="query";
sEn[
11]="looksmart";keyWord[11]="key";
sEn[
12]="about";keyWord[12]="terms";
sEn[
13]="excite";keyWord[13]="qkw";
sEn[
14]="mamma";keyWord[14]="query";
sEn[
15]="alltheweb";keyWord[15]="q";
sEn[
16]="gigablast";keyWord[16]="q";
sEn[
17]="voila";keyWord[17]="kw";
sEn[
18]="virgilio";keyWord[18]="qs";
sEn[
19]="teoma";keyWord[19]="q";
sEn[
20]="baidu";keyWord[20]="wd";
//testdata----------------------------//-----------/-/-/-/-/-/-/-/-/-/-/-
sEn[21]="localhost";keyWord[21]="q";
/**/ /**/

这里面定义一些全局的量,其中upr,urpv为来源参数和指,比如来源为http://www.google.com/?p=BlackSoul&q=javascript,则urp[0]="p",urp[1]="q" 相对应的urpv[0]="BlackSoul",urpv[1]="javascript".
但是最终传输的时候是以分隔符的形式传递给服务器端的.
GUID为随机数,google是这么做的.当初没有想通为什么要保存一个随机数,后来分析数据的才明白过来.为了验证用户的唯一性.
以下是函数处理:
// -----------------------------比较url,如果为搜索引擎则保存关键字-------------
function getKeyword(url)
{
varhostname;
if(url.indexOf(".")==-1)
{hostname=url;}
else
{hostname=url.substring(url.indexOf("."),url.lastIndexOf("."));}
for(vari=0;i<sEn.length;i++)
{
if(hostname==sEn[i])
{
for(varj=0;j<urp.length;j++)
{
if(urp[j]==keyWord[i])
{
returnurpv[j];
}

}

}

}


return"";
}

// 将URL转换为地址和页面参数和参数值参数uri为页面地址
function gethn(uri)
{
if(!uri||uri=="")return"";
ur
=uri;
varsub;
//带参数
if(ur.indexOf("?")!=-1)
{
varurl=ur.substring(0,ur.indexOf("?"));
varpara=ur.substring(ur.indexOf("?")+1,ur.length);
while(para.length>0)
{
if(para.indexOf("&")==-1)
{
urp[arrayCount]
=para.substring(0,para.indexOf("="));
urpv[arrayCount]
=para.substring(para.indexOf("=")+1,para.length);
break;
}

sub
=para.substring(0,para.indexOf("&"));
urp[arrayCount]
=sub.substring(0,sub.indexOf("="));
urpv[arrayCount]
=sub.substring(sub.indexOf("=")+1,sub.length);
para
=para.substring(para.indexOf("&")+1,para.length);
arrayCount
++;
}

returnurl;
}

else
returnur;
}


// ----------------------------获得域名---------------------------------------------
function getHostName(url)
{
url
=url.substring(url.indexOf('://')+3,url.length);
url=url.substring(0,url.indexOf("/"));
returnurl;
}


// ---------------------------获得flash版本------------------------------------------
function getFlash() {
varf="-1",n=navigator;
if(n.plugins&&n.plugins.length){
for(varii=0;ii<n.plugins.length;ii++){
if(n.plugins[ii].name.indexOf('ShockwaveFlash')!=-1){
f
=n.plugins[ii].description.split('ShockwaveFlash')[1];
break;
}

}

}
elseif(window.ActiveXObject){
for(varii=10;ii>=2;ii--){
try{
varfl=eval("newActiveXObject('ShockwaveFlash.ShockwaveFlash."+ii+"');");
if(fl){f=ii+'.0';break;}
}

catch(e){}
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值