常看到代码http://www.google-analytics.com/urchin.js,这个JS是GOOGLE的analytics 分析代码
google analytics 的功能是非常强大的,强烈推荐使用网上找的:
//定义全局量
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)
{
for(var j = 0; j < urp.length; j ++)
{
if(urp[j] == keyWord)
{
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.indexOf('Shockwave Flash')!=-1) {
f=n.plugins[ii].description.split('Shockwave Flash ')[1];
break;
}
}
} else if (window.ActiveXObject) {
for (var ii=10;ii>=2;ii--) {
try {
var fl=eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash."+ii+"');");
if (fl) { f=ii + '.0'; break; }
}
catch(e) {}
}
}
if(f == "-1")
return f;
else
return f.substring(0,f.indexOf(".")+2);
}
//--------------------------设置异步传输-----------------------------------
function createXMLHttpRequest()
{
if (window.XMLHttpRequest)
{
return new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
return new ActiveXObject("Microsoft.XMLHttp");
}
} 以上的方法可以取得一些基本信息.但是关键的问题还是设置用户cookie,判断回访,判断最后一次访问时间,并设置其GUID.这里看了很久没有发现google是怎么做的...于是自己想了一些笨办法.见一下代码:
//浏览器特征信息
function BrowserInfo()
{
brower[0] = navigator.appName;
brower[7] = navigator.language;
if(brower[0] == "Netscape")
{
var browerInfo = navigator.userAgent;
brower[1] = browerInfo.substring(browerInfo.lastIndexOf(" ")+1,browerInfo.length);
brower[0] = brower[1].substring(0,brower[1].lastIndexOf("/"));
brower[1] = browerInfo.substring(browerInfo.lastIndexOf("/")+1,browerInfo.length);
brower[7] = navigator.language;
}
else if(brower[0] == "Microsoft Internet Explorer")
{
brower[1] = navigator.userAgent.split(";")[1];
brower[7] = navigator.userLanguage;
}
brower[2] = navigator.javaEnabled()?1:-1;
brower[3] = getFlash();
brower[4] = getOS();
if (self.screen) {
sr=screen.width+"x"+screen.height;
sc=screen.colorDepth+"-bit";
}
else if (self.java)
{
var j=java.awt.Toolkit.getDefaultToolkit();
var s=j.getScreenSize();
sr=s.width+"x"+s.height;
}
//分辨率
brower[5] = sr;
//色深
brower[6] = sc;
//插件列表
brower[8] = getPlugin();
}
//-----------------------获得当前地址-----------------------------
function getHref()
{
return document.location.href;
}
//-----------------------cookie操作开始-----------------------------------------------------------------------------------------------------------------
function setCookie(name, value)
//设定Cookie值
{
var expdate = new Date();
var argv = setCookie.arguments;
var argc = setCookie.arguments.length;
var expires = 15768000;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
if(expires!=null)
{
//设置过期时间24小时
expdate.setTime(uexp);
document.cookie = name + "=" + escape (value) +((expires == null) ? "" : ("; expires="+ expdate.toGMTString()))
+ ((path == null) ? "" : ("; path=" + path)) +((domain == null) ? "" : ("; domain=" + domain))
+ ((secure == true) ? "; secure=" : "");
}
}
function delCookie(name)
//删除Cookie
{
var exp = new Date();
exp.setTime (exp.getTime() - 1);
var cval = getCookie (name);
document.cookie = name + "=" + cval + "; expires="+ exp.toGMTString();
}
//获得Cookie的值
function getCookie(fname)
{
var name,value;
var cookies = new Object();
var beginning,middle,end;
beginning = 0;
while(beginning < document.cookie.length)
{
middle = document.cookie.indexOf("=",beginning);
end = document.cookie.indexOf(";",beginning);
if(end == -1)
{
end = document.cookie.length;
}
if((middle > end) || (middle == -1))
{
name = document.cookie.substring(beginning,end);
value = "";
}
else
{
name = document.cookie.substring(beginning,middle);
value = document.cookie.substring(middle+1,end);
}
if(name == fname)
{
return unescape(value);
}
beginning = end + 2;
}
}
//-----获取GUID的cookie是否存在获得---------------------------------------------------
function getCookieValue()
{
var guid = getCookie("GUID");
if(guid != null)
{
return guid;
}
else
{
return "noCookie";
}
}
//---------------------获得注册用户cookie---------------------------------------------
function getRegUserCookie()
{
return ;
}
//-----------------------------cookie 操作完毕------------------------------------------------------------------------------------------------------------
//---------------------------得操作系统---------------------------
function getOS()
{
var OSlist = new Array();
var OSName = new Array();
OSlist[0] = " Windows4.0"; OSName[0] = "Windows 95";
OSlist[1] = " Windows 98"; OSName[1] = "Windows 98";
OSlist[2] = " Windows NT 5.0"; OSName[2] = "Windows 2000";
OSlist[3] = " Windows NT 5.1"; OSName[3] = "Windows XP";
OSlist[4] = " Windows NT 5.2"; OSName[4] = "Windows Server 2003";
var ua = navigator.userAgent.split(";");
for(var i = 0; i < OSlist.length; i++)
{
if(ua[2] == OSlist)
return OSName;
}
return ua[2];
}
//获得插件
function getPlugin()
{
var plugin = "";
var ua = navigator.userAgent.split(";");
if(ua.length < 4)
return "";
for(var i = 4; i < ua.length; i++)
{
plugin += ua + ",";
}
return plugin.substring(0,plugin.length-2);
}
需要说明的一点是GetResidentTime这个函数,google采用了img.load的方法加载了接收处理信息页面的,需要再服务器端配置将后缀为.gif或你所取的其他形式的文件使用aspx的方式编译运行.因为我原来考虑的是使用xmlHttp异步调用.但是页面退出的时候有时候不执行.所以就弃用了.代码如下: function GetResidentTime()
{
pageClose = new Date();
minutes = (pageClose.getMinutes() - pageOpen.getMinutes());
if(minutes < 0)
{
minutes = minutes + 60;
}
seconds = (pageClose.getSeconds() - pageOpen.getSeconds());
if(seconds < 0){ seconds += 60;}
time = (seconds + (minutes * 60));
//------------------------修改此处为接收链接地址 XML 异步传输------------------------------------
// var xmlHttp = createXMLHttpRequest();
// xmlHttp.open("POSt", reqURL + firstvisit.aspx?" + StrPara(), false);
// xmlHttp.send(null);
//----------------------------图片形式传递-------------------------------------------------------
if(isReturn() == false)
{
var i = new Image(1,1);
i.src = reqURL + "firstVisit.aspx?" + StrPara() + "&GUID=" + GUID;
i.onload = function() {LoadVoid();}
//进入页面的信息
if(getCookieValue("GUID") == "noCookie"){return ;}
i.src = reqURL + "pageView.gif?" + pageView() + "&st=" + time;
i.onload=function() {LoadVoid();}
}
else
{
var i=new Image(1,1);
i.src = reqURL + "pageView.gif?" + pageView() + "&st=" + time;
i.onload=function() {LoadVoid();}
}
}
最后就是调用了.我使用了window.onunload = GetResidentTime
传递的参数大家可以打印出来看一下.应该可以明白其意思.
剩下的就是服务器端的处理了,在服务器端处理其实相当简单.取得request的值,验证并保存入数据库.现在有了数据,分析的事情就由用户按照自己的要求来处理了..补充一句,ip地址是由服务器端来取得保存的.
使用的时候记得一定将其放到服务器端,然后使用<javascript language="javascript" type="text/javascript" src=服务器地址+路径+"statistics.js"> </script> (把文件名改成statistics.js方便记忆)
这里附上完整的代码(加上说明了)下载在附件里面.
该例子我在IE,firefox,netscape下面测试都很正常.搞了一个月,总算有所成就了.但是还有很多需要改进的地方,希望做过的,感兴趣的朋友多多指点交流.
相关推荐
本篇文章将深入探讨jQuery SuckerFish的原理、使用方法以及其在"urchin.zip"文件中的具体应用。 首先,jQuery是一个快速、简洁的JavaScript库,它极大地简化了JavaScript编程,使得网页动态效果的实现变得简单易行...
Urchin.js是早期的Google Analytics代码,而ga.js是后来的版本,它们各自有不同的部署方式。 - ga.js代码段应该被嵌入到网站的每一个页面中,以便跟踪网站的浏览量等数据。新代码提供自动侦测协议(http或https)的...
JavaScript是一种广泛应用于网页和网络应用的编程语言,它在网页中负责实现动态效果、交互功能以及数据的异步传输。本资源"网站Englishboby的全部javascript代码"为我们提供了研究JavaScript实际应用的一个宝贵实例...
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script> <script type="text/javascript"> _uacct = "UA-556982-2"; urchinTracker(); ``` 上面这段代码展示了如何使用...
在ASP环境中,开发者可能会使用类似Urchin.js的JavaScript代码来追踪和分析网站用户的行为,收集访问量、用户来源、页面浏览路径等数据,以便优化网站性能和营销策略。 综上所述,ASP作为一款历史悠久的Web开发技术...
JavaScript库从网址中删除了Urchin Traffic Monitor(UTM)参数。 安装 用Bower安装 $ bower install unutm 用法 通过向HTML添加以下HTML代码来调用此库: [removed][removed] Google Analytics(实验) 在Google...
按F1出现提示 帮助信息 ...<script src="urchin.js" type="text/javascript"> <script type="text/javascript"> // _uacct = "UA-85864-2"; _uacct = "UA-2042963-1"; urchinTracker(); </script>
如何优化Urchin配置文件数据库的磁盘空间是关乎到Urchin系统高效运行的关键问题。Urchin是一款网络分析工具,它存储分析后的数据在每个配置文件的专属月度数据库中,这些数据库通常位于`data/reports`目录下。随着...
提供了用于解析节点,获取节点和nids列表以及访问字段的帮助程序类,其总体目标是为任何基于Drupal的编辑站点提供坚实的开端。安装Urchin应该放置在模板的lib目录中。 不过,最好将Urchin作为git子模块添加,而不是...
很抱歉,但根据您给出的信息,无法生成符合要求的IT知识文章。标题和描述中的内容看起来像是混合了随机字符和网址,而标签和压缩包子文件的名称“sogou”同样缺乏明确的IT知识点。如果这些是某种加密、编码或者特定...
开始创建您的第一个Web和应用程序原型 在几分钟之内创建逼真的,完全交互式的Web或应用程序原型,无需编程。您将需要的最高技能是单击鼠标和拖放。
在这个例子中,"urchin.js"文件提供了动态交互的功能。JavaScript被用来处理用户的交互事件,例如鼠标悬停、点击等,以实现菜单的展开和收起效果。通过监听DOM元素的事件,JavaScript可以改变CSS属性(如`display`)...
// 注释解释了为什么使用 'text/javascript' 而不是更标准的 'application/javascript' if (callback) { script.onload = script.onreadystatechange = function () { if (script.readyState && script....
"Urchin"挤出机的设计考虑了精度、耐用性和易用性,以满足不同用户的需求。它的设计可能包括以下特点: 1. **高效的散热系统**:挤出机通常需要快速冷却熔融的塑料,以防止堵塞和保持打印质量。Urchin可能采用了...
本文将深入探讨“UrchinEngineTest”,一个基于Urchin引擎的测试应用,以及如何在Linux环境下构建和运行这个测试项目。 首先,Urchin引擎是一款开源的游戏开发平台,它支持多种特性,包括高级图形渲染、物理模拟、...
Urchin 是基于 Web 的 RSS 聚合器和过滤器。 Urchin 的主要目的是通过从 Urchin 数据库中的项目集合中选择感兴趣的项目来生成新的 RSS 提要。
在本章中,我们将探索Odoo的前端,学习如何创建网页、创建用户可以在页面上拖放的构建块,并涵盖高级主题,如Urchin跟踪模块(UTMs)、搜索引擎优化(SEO)、多网站、GeoIP和网站地图。 Odoo CMS的重要特点是所有的...
Urchin是Google Analytics的前身,它曾经提供了一些Flash组件来显示统计报告。尽管现代的Google Analytics已不再依赖Flash,但这个文件可能仍用于展示如何在旧系统中集成统计图表。 在实际应用中,Google Analytics...
例如,他们可以找出在特定时间和空间位置激活或抑制的基因,以及这些基因之间的相互作用。这些发现不仅有助于我们理解海胆的生长发育,而且可能会对其他生物,甚至人类的胚胎发育过程提供宝贵的见解。 总的来说,...