新用户注册入口 老用户登录入口

[转载]HTML页面浏览历史,浏览历史记录功能

文章作者:转载 更新时间:2023-04-30 21:14:40 阅读数量:47
文章标签:浏览历史记录Cookie用户点击行为链接(A标签)存储降序排列
本文摘要:本文作者通过JavaScript实现了一个网页浏览历史记录功能,该功能能够追踪用户在网站上的点击行为(用户点击行为),特别是对链接(A标签)的点击,并将这些记录存储在Cookie中。利用`window.event`对象、`srcElement`属性等方法捕获事件信息,通过自定义函数`glog`、`getCookie`、`setCookie`以及`history_show`实现数据读取、写入与展示。其中,特别关注了浏览历史记录的不重复性及只显示最近6条记录的要求,确保了功能的有效性和实用性。最终,成功展示了用户浏览历史排行,满足了页面设计的需求。
转载文章

本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_30611227/article/details/117818020。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

最近在工作当中遇到一个问题 有个页面需要添加一个浏览历史记录功能

具体来说就是要记录下用户在此网站的点击历史 并把它们降序排列出来(只显示前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;   //取出事件发生源的名称,也就是和之间的文字,也就是链接名称哈

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.οnclick=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+=("↑"+""+wlink[0]+"
");

}

document.getElementById("history").innerHTML=content;

}

}

else

{document.getElementById("history").innerHTML="对不起,您没有任何浏览纪录";}

}

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

查看效果

//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.οnclick=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+=("↑"+""+wlink[0]+"
");

}

document.getElementById("history").innerHTML=content;

}

}

else

{document.getElementById("history").innerHTML="对不起,您没有任何浏览纪录";}

}

// JavaScript Document

浏览历史排行(只显示6个最近访问站点并且没有重复的站点出现)

history_show();

点击链接:

网站1

网站2

网站3

网站4

网站5

网站6

网站7

网站8

网站9

如果有其他疑问请登陆www.achome.cn与我联系

 提示:您可以先修改部分代码再运行

本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_30611227/article/details/117818020。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

相关阅读
文章标题:[转载][洛谷P1082]同余方程

更新时间:2023-02-18
[转载][洛谷P1082]同余方程
文章标题:[转载]webpack优化之HappyPack实战

更新时间:2023-08-07
[转载]webpack优化之HappyPack实战
文章标题:[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法

更新时间:2023-09-10
[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法
文章标题:[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo

更新时间:2024-03-11
[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo
文章标题:[转载]程序员也分三六九等?等级差异,一个看不起一个!

更新时间:2024-05-10
[转载]程序员也分三六九等?等级差异,一个看不起一个!
文章标题:[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集

更新时间:2024-01-12
[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集
名词解释
作为当前文章的名词解释,仅对当前文章有效。
window.event对象在JavaScript中,window.event是一个全局变量,它代表了当前正在处理的事件的状态信息。当用户与网页进行交互(如点击、滚动、键盘输入等)时,浏览器会生成一个event对象,并将其与触发该事件的元素关联起来。这个对象包含了事件的各种属性和方法,例如触发事件的元素(event.srcElement或event.target)、鼠标的位置及状态、按下的键等。然而,需要注意的是,window.event对象并非W3C标准,现代浏览器推荐使用事件处理器中的参数来获取event对象。
CookieCookie是Web开发中用于客户端存储数据的一种机制。它是服务器发送到用户浏览器并由浏览器保存的一小段文本信息,每次用户向同一服务器发起请求时,浏览器会自动将Cookie信息一同发送过去。在这篇文章的上下文中,Cookie被用来存储用户的浏览历史记录,以便于在用户下次访问网站时能快速展示最近的浏览记录。通过getCookie和setCookie这两个自定义函数,实现对Cookie值的读取和写入操作。
JavaScript事件监听在JavaScript编程中,事件监听是一种响应用户交互或系统事件的技术。通过为HTML元素绑定事件处理器函数,开发者可以让程序在特定事件发生时执行相应的代码逻辑。例如,在这篇文章中,作者创建了一个名为glog的函数,并通过document.onclick=glog将此函数设置为页面上的全局点击事件监听器,这样每当用户在页面上点击任何位置时,都会触发glog函数以记录用户的点击行为,并根据业务需求更新浏览历史记录。
延伸阅读
作为当前文章的延伸阅读,仅对当前文章有效。
在深入理解了如何使用JavaScript实现网页浏览历史记录功能后,我们可以进一步探讨该技术在当前互联网环境下的应用与发展。近年来,随着用户隐私保护意识的增强和GDPR等法规的出台,浏览器对Cookie的限制日益严格,这对依赖Cookie记录用户行为的功能提出了新的挑战。
例如,2021年苹果公司在iOS 14.5系统中引入了ATT(App Tracking Transparency)框架,要求应用在跟踪用户数据前必须征得用户的明确同意,这一变化直接影响到网站和应用对用户浏览历史记录的收集方式。因此,开发者正在寻找替代方案,如使用IndexedDB进行本地存储或者采用Server-side session管理等技术手段。
此外,对于JavaScript追踪用户点击行为的方式也在不断优化。现代前端框架如React、Vue等提供了更强大的状态管理和事件处理机制,可以帮助开发者更高效地实现用户交互行为的记录与分析。同时,Google Analytics 4等先进的分析工具已经实现了无Cookie的用户行为追踪,并能够提供更为详尽且合规的用户行为洞察报告。
综上所述,在确保用户隐私的前提下,运用JavaScript实现在不同场景下的浏览历史记录是一项与时俱进的技术实践。开发者不仅需要关注最新的编程技术和规范,同时也需紧跟行业发展趋势及法律法规要求,以实现用户体验与数据安全之间的平衡。
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
sort file.txt - 对文本文件内容按默认顺序排序。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
HessianRPC在高负载下服务降级与熔断器模式保障用户体验 05-01 jQuery和TweenMax简单实用的水平手风琴特效 01-20 jquery选择国家下拉列表框插件 01-21 Sqoop在Hadoop集群中的数据传输机制及数据库迁移、收集与备份恢复应用实践 12-23 简约渔具批发牧渔企业类网站前端模板下载 11-09 基于bootstrap功能齐全的jQuery进度条插件 10-20 简约大气男性护肤产品HTML5网站模板 09-22 宽屏大气机械设备制造公司网站模板 08-13 演讲会门票销售网站模板下载 07-30 本次刷新还10个文章未展示,点击 更多查看。
经典响应式投资理财企业前端模板 06-26 基于Redis的键值对存储实现用户阅读状态跟踪与管理 06-24 Netty框架中CannotFindServerSelection异常:服务器地址配置错误与通道类型匹配详解 06-18 简洁设计公司响应式网站模板下载 05-06 绿色苗木草坪种植绿化类企业前端CMS模板下载 04-30 怎么在cmd开启mysql服务 04-15 保洁公司家庭保洁服务网站模板 03-26 SpringCloud微服务中分布式锁的死锁问题与状态一致性维护:避免循环依赖、公平锁及超时重试机制在Redisson中的实践运用 03-19 HBase性能测试与RegionServer配置、架构及数据模型调优实践:关注响应时间、并发处理能力与BlockCache优化 03-14 jquery控制radio触发事件 02-15 简约HTML5软件营销业务公司网站模板 02-09
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"