相信用过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)
{}
}
}
由于工作需要,最近将其urchin.js的代码down了一份下来研究了一下.由于其注释很少,命名也很难读懂.研究了1个月.小有所成.将其代码重写并加上了注释.与大家一同分享.这里面将google的用户识别代码删除.






























































这里面定义一些全局的量,其中upr,urpv为来源参数和指,比如来源为http://www.google.com/?p=BlackSoul&q=javascript,则urp[0]="p",urp[1]="q" 相对应的urpv[0]="BlackSoul",urpv[1]="javascript".
但是最终传输的时候是以分隔符的形式传递给服务器端的.
GUID为随机数,google是这么做的.当初没有想通为什么要保存一个随机数,后来分析数据的才明白过来.为了验证用户的唯一性.
以下是函数处理:




























































































































