当前位置:中国站长下载文章中心网页编程.NET编程 → google的分析(analytics)js代码分析以及重写

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

减小字体 增大字体 作者:不详  来源:不详  发布时间:2006-8-14 8:28:40
    
   相信用过google的analytics的朋友都了解其功能的强大.
   由于工作需要,最近将其urchin.js的代码down了一份下来研究了一下.由于其注释很少,命名也很难读懂.研究了1个月.小有所成.将其代码重写并加上了注释.与大家一同分享.这里面将google的用户识别代码删除. /**//*
   =====================================
  |--------Author By BlackSoul---------|
  |------------2006.04.27--------------|
  |--------BlackSoulylk@gmail.com------|
  |------------QQ:9136194--------------|
  |------http://blacksoul.cnblogs.cn---|
  ======================================
  */
  
  //定义全局量
  var ur = ""; //来源地址
  var urp = new Array(); //来源参数名称
  var urpv = new Array(); //来源参数值
  var arrayCount = 0; //参数数目
  pageOpen = new Date(); //进入页面的时间
  var reqURL = "http://192.168.0.219/Analytics/"; //接收数据的页面地址
  var GUID = Math.round(Math.random()*2147483647); //用户唯一随机数
  var title = document.title; //网页标题
  var uexp = pageOpen.getTime() + ( 1000 * 60 * 60 * 24 * 30 ); //设置cookie过期时间 既回访用户的限定
  var rtu = "false"; //指示用户是否回访用户
  
  //浏览器特征信息
  var brower = new Array();
  /**//*
  * brower[0] 浏览器类型
  * brower[1] 浏览器版本
  * brower[2] 浏览器java是否打开 1开-1关
  * brower[3] 浏览器flash版本
  * brower[4] 浏览器操作系统
  * brower[5] 浏览器分辨率
  * brower[6] 浏览器色深
  * brower[7] 浏览器语言
  * brower[8] 浏览器插件
  */
  var sEn=new Array(); //搜索引擎的名称
  var keyWord=new Array(); //关键字传输形式
  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";
  //test data----------------------------//////////////////////////////-----------/-/-/-/-/-/-/-/-/-/-/-
  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)
  {
   var hostname;
   if(url.indexOf(".") == -1)
   {hostname = url;}
   else
   {hostname = url.substring(url.indexOf("."),url.lastIndexOf("."));}
   for(var i = 0; i < sEn.length; i++)
   {
   if(hostname == sEn[i])
   {
   for(var j = 0; j < urp.length; j ++)
   {
   if(urp[j] == keyWord[i])
   {
   return urpv[j];
   }
   }
   }
   }
  
   return "";
  }
  //将URL转换为地址和页面参数和参数值 参数uri为页面地址
  function gethn(uri)
  {
   if(!uri || uri == "") return "";
   ur = uri;
   var sub;
   //带参数
   if(ur.indexOf("?") != -1)
   {
   var url = ur.substring(0,ur.indexOf("?"));
   var para = 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 ++;
   }
   return url;
   }
   else
   return ur;
  }
  
  //----------------------------获得域名---------------------------------------------
  function getHostName(url)
  {
   url = url.substring(url.indexOf('://')+3,url.length);
   url = url.substring(0,url.indexOf("/"));
   return url;
  }
  
  //---------------------------获得flash版本------------------------------------------
  function getFlash() {
   var f="-1",n=navigator;
   if (n.plugins && n.plugins.length) {
   for (var ii=0;ii<n.plugins.length;ii++) {
   if (n.plugins[ii].name.ind

[1] [2] [3]  下一页