阅读内容 

用javascript结合Cookies记录浏览历史

[日期:2006-03-29] 来源:  作者: [字体: ]
本文是www.achome.cn原创文章,如需转载请注明文章出处和作者信息,谢谢合作!

最近在工作当中遇到一个问题 有个页面需要添加一个浏览历史记录功能
具体来说就是要记录下用户在此网站的点击历史 并把它们降序排列出来(只显示前6个浏览历史而且不能重复)
由于以前对JavaScript了解不够深入 一时间手足无措
后来经过两位高手同事的指点(对这两位同事的敬仰犹如滔滔江水连绵不绝...) 恍然大悟 豁然开朗
成功地完成了此功能的添加

首先来介绍一下JavaScript中关于此功能的一些对象和方法:

1. window.event对象:

event代表事件的状态,例如触发event对象的元素、鼠标的位置及状态、按下的键等等。
event对象只在事件发生的过程中才有效。

2. event.srcElement:

表示该事件的发生源 通俗一点说也就是该事件被触发的地方

3. srcElement.parentNode:

表示该事件发生源的父结点

4. srcElement.tagName:

表示事件发生源的标签名

5. toUpperCase():

大写化相应字符串的方法

基本上就是这些属性和方法,可能对于刚刚接触JavaScript的朋友们或者以前很少使用此类功能的朋友来说,
这些对象有些陌生,不过没关系,了解以后发现其实并不难,和JavaScript验证表单之类的并没有太多的不同。

下面就结合程序给大家一步一步讲解(程序难免有不合理之处,希望大家多多指正,共同进步):

第一部分:JavaScript纪录浏览动作
	function glog(evt)  //定义纪录鼠标点击动作的函数
{
evt=evt?evt:window.event;var srcElem=(evt.target)?evt.target:evt.srcElement;
try
{
while(srcElem.parentNode&&srcElem!=srcElem.parentNode) 
//以上这个语句判断鼠标动作是否发生在有效区域,防止用户的无效点击也被纪录下来
{
if(srcElem.tagName&&srcElem.tagName.toUpperCase()=="A")//判断用户点击的对象是否属于链接
{
linkname=srcElem.innerHTML;   //取出事件发生源的名称,也就是<a>和<a/>之间的文字,也就是链接名称哈
address=srcElem.href+"_www.achome.cn_";        //取出事件发生源的href值,也就是该链接的地址
wlink=linkname+"+"+address;              //将链接名称和链接地址整合到一个变量当中	
old_info=getCookie("history_info");      //从Cookies中取出以前纪录的浏览历史,该函数后面有声明

//以下程序开始判断新的浏览动作是否和已有的前6个历史重复,如果不重复则写入cookies
var insert=true;                                     
if(old_info==null)          //判断cookie是否为空
{
	insert=true;
}
else
{	
var old_link=old_info.split("_www.achome.cn_");
for(var j=0;j<=5;j++)
  {
	if(old_link[j].indexOf(linkname)!=-1)
	insert=false;
	if(old_link[j]=="null")
	break;
	}
	}

if(insert)
{
wlink+=getCookie("history_info");
setCookie("history_info",wlink);  //写入cookie,该函数后面有声明
history_show().reload();
break;
}

}
srcElem = srcElem.parentNode;
}
}
catch(e){}
return true;
}

document.onclick=glog;//使每一次页面的点击动作都执行glog函数


第2部分:Cookies的相关函数
//cookie的相关函数

//读取cookie中指定的内容
function getCookieVal (offset) { 
	var endstr = document.cookie.indexOf (";", offset); 
	if (endstr == -1) endstr = document.cookie.length; 
    return unescape(document.cookie.substring(offset, endstr)); 
 } 
						 
 function getCookie (name) {
         var arg = name + "="; 
         var alen = arg.length; 
         var clen = document.cookie.length; 
         var i = 0; 
         while (i < clen) { 
             var j = i + alen; 
             if (document.cookie.substring(i, j) == arg) return getCookieVal (j); 
             i = document.cookie.indexOf(" ", i) + 1; 
             if (i == 0) break; 
         } 
	     return null; 
 } 

//将浏览动作写入cookie
function setCookie (name, value) { 
       var exp = new Date(); 
       exp.setTime (exp.getTime()+3600000000); 
       document.cookie = name + "=" + value + "; expires=" + exp.toGMTString(); 
}


第3部分:页面显示函数
function history_show()
{			
	var history_info=getCookie("history_info");    //取出cookie中的历史记录
	var content="";	                                        //定义一个显示变量
	if(history_info!=null)
	{
	history_arg=history_info.split("_www.achome.cn_");
	var i;
	for(i=0;i<=5;i++)
	{
		if(history_arg[i]!="null")
		{
		var wlink=history_arg[i].split("+");
			content+=("<font color='#ff000'>↑</font>"+"<a href='"+wlink[1]+"' target='_blank'>"+wlink[0]+"</a><br>");
			}
			document.getElementById("history").innerHTML=content;
			}
}
else
	{document.getElementById("history").innerHTML="对不起,您没有任何浏览纪录";}
}



代码差不多就是这些了 就为大家分析到这里 还有不足之处还请大家多多指教 下面可以运行代码查看效果:

<HTML>
<body>
 
<script>

//cookie的相关函数
function getCookieVal (offset) {
 var endstr = document.cookie.indexOf (";", offset);
 if (endstr == -1) endstr = document.cookie.length;
    return unescape(document.cookie.substring(offset, endstr));
 }
      
 function getCookie (name) {
         var arg = name + "=";
         var alen = arg.length;
         var clen = document.cookie.length;
         var i = 0;
         while (i < clen) {
             var j = i + alen;
             if (document.cookie.substring(i, j) == arg) return getCookieVal (j);
             i = document.cookie.indexOf(" ", i) + 1;
             if (i == 0) break;
         }
      return null;
 }
function setCookie (name, value) {
       var exp = new Date();
       exp.setTime (exp.getTime()+3600000000);
       document.cookie = name + "=" + value + "; expires=" + exp.toGMTString();
}

////////////////////////////////////

 function glog(evt)
{
 
evt=evt?evt:window.event;var srcElem=(evt.target)?evt.target:evt.srcElement;

try
{
while(srcElem.parentNode&&srcElem!=srcElem.parentNode)
{
if(srcElem.tagName&&srcElem.tagName.toUpperCase()=="A")
{
linkname=srcElem.innerHTML;
address=srcElem.href+"_www.achome.cn_";
wlink=linkname+"+"+address; 
old_info=getCookie("history_info");
var insert=true; 
////////////////////////

if(old_info==null)          //判断cookie是否为空
{
 insert=true;
}
else

var old_link=old_info.split("_www.achome.cn_");
for(var j=0;j<=5;j++)
  {
 if(old_link[j].indexOf(linkname)!=-1)
 insert=false;
 if(old_link[j]=="null")
 break;
 }
 }


/////////////////////////////
if(insert)                //如果符合条件则重新写入数据
{
wlink+=getCookie("history_info");
setCookie("history_info",wlink);
history_show().reload();
break;
}

}
srcElem = srcElem.parentNode;
}
}
catch(e){}
return true;
}

document.onclick=glog;


////////////////////////////////////////////////////////////////////////////////


function history_show()
{   
 var history_info=getCookie("history_info");
 var content=""; 
 if(history_info!=null)
 {
 history_arg=history_info.split("_www.achome.cn_");
 var i;
 for(i=0;i<=5;i++)
 {
  if(history_arg[i]!="null")
  {
    var wlink=history_arg[i].split("+");
   content+=("<font color='#ff000'>↑</font>"+"<a href='"+wlink[1]+"' target='_blank'>"+wlink[0]+"</a><br>");
   }
   document.getElementById("history").innerHTML=content;
   }
}
else
 {document.getElementById("history").innerHTML="对不起,您没有任何浏览纪录";}
}


// JavaScript Document


</script>


<div>浏览历史排行(只显示6个最近访问站点并且没有重复的站点出现)</div>
<div id="history">
<script>
history_show();
</script>
</div>
<div>
<br>
<br>
点击链接:
<a href="#">网站1</a>
<a href="#">网站2</a>
<a href="#">网站3</a>
<a href="#">网站4</a>
<a href="#">网站5</a>
<a href="#">网站6</a>
<a href="#">网站7</a>
<a href="#">网站8</a>
<a href="#">网站9</a>
</div>

<div>如果有其他疑问请登陆<a href="http://www.achome.cn">www.achome.cn</a>与我联系</div>
</body>
</HTML>

 

阅读:
录入:blue1000

推荐 】 【 打印
相关新闻      
本文评论       全部评论
发表评论
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款


点评: 字数
姓名:
Advertisement
内容查询


Advertisement