JavaScript中document.referrer的用法详解


Posted in Javascript onJuly 04, 2017

前言

在JavaScript中,document对象有很多属性,其中有3个与对网页的请求有关的属性,它们分别是URL、domain和referrer。

URL属性包含页面完整的URL,domain属性中只包含页面的域名,而referrer属性中则保存着链接到当前页面的那个页面的URL。

前面两个很好理解,而referrer属性简单来说就是上一个页面的URL。那么这个属性具体有什么用处呢?

在H5页面中,我们经常要在头部加个返回上一个页面按钮,就像下面这样的:

JavaScript中document.referrer的用法详解
页面头部

点击左侧的元素可以返回到上一个页面,我们可以简单写一段JS代码:

var back = document.getElementById('back'); //假设该返回按钮元素id为back
back.onclick = function(){
 history.back(); //返回上一个页面,也可以写成history.go(-1)
};

或者有个更简单的方式,不用写这么多JS,只需直接用a标签表示该返回按钮元素:

<a id="back" href="javascript:history.back();" rel="external nofollow" ></a>

咦?上面说了这么多,还是没有说到document.referrer有什么用呀!别急,前面只是铺垫,接下来步入正题~~~

虽说感觉上面这样已经基本上实现了返回上一页的功能,但是有一种情况没有考虑到(我们程序员还是要严谨一点嘛),就是假如该页面是别人分享过来的而不是通过其他页面进入的呢?那么点击该按钮将不会有任何反应,因为此时history对象中不存在历史记录,也就是说这是你浏览器窗口打开时浏览的第一个页面。

为了优化用户体验,这里通常有两种解决方案。一种是在打开第一个页面时不显示返回上一页按钮,另一种是点击直接跳转到网站首页,这可以根据产品需求来选择合适的方案。

这里假设选择第一种方案,我们可以这样写段JS:

if(document.referrer){
 back.style.display = 'block'; //默认让其隐藏,当referrer属性不为空时让其显示
}

结束语

其实判断当前页面是否是用户一开始打开的页面,方法也不止通过判断referrer属性这一种方法,还可以通过history.length是否为零来判断。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
js 小数取整的函数
May 10 Javascript
JS面向对象编程 for Cookie
Sep 19 Javascript
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
Jan 06 Javascript
jQuery Ajax 实例全解析
Apr 20 Javascript
[原创]推荐10款最热门jQuery UI框架
Aug 19 Javascript
JavaScript中的console.group()函数详细介绍
Dec 29 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
Sep 30 Javascript
Vue中fragment.js使用方法详解
Mar 09 Javascript
vue实现搜索过滤效果
May 28 Javascript
vue v-for 使用问题整理小结
Aug 04 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
Sep 28 Javascript
js绘制一条直线并旋转45度
Aug 21 Javascript
基于hover的用法实例(推荐)
Jul 04 #Javascript
js学习总结_基于数据类型检测的四种方式(必看)
Jul 04 #Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
Jul 04 #Javascript
javascript 初学教程及五子棋小程序的简单实现
Jul 04 #Javascript
基于Bootstrap分页的实例讲解(必看篇)
Jul 04 #Javascript
JS全角与半角转化实例(分享)
Jul 04 #Javascript
详解如何提高 webpack 构建 Vue 项目的速度
Jul 03 #Javascript
You might like
开发大型 PHP 项目的方法
2007/01/02 PHP
测试php连接mysql是否成功的代码分享
2014/01/24 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
2014/11/19 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
javascript设计简单的秒表计时器
2020/09/05 Javascript
JavaScript常用数组算法小结
2016/02/13 Javascript
JavaScript 经典实例日常收集整理(常用经典)
2016/03/30 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
Angular2表单自定义验证器的实现
2016/10/19 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
2018/07/09 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
js cavans实现静态滚动弹幕
2020/05/21 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
[45:14]Optic vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
Python 可爱的大小写
2008/09/06 Python
python机器学习实战之K均值聚类
2017/12/20 Python
Python魔法方法详解
2019/02/13 Python
python实现网站微信登录的示例代码
2019/09/18 Python
Python如何使用内置库matplotlib绘制折线图
2020/02/24 Python
django 解决自定义序列化返回处理数据为null的问题
2020/05/20 Python
python递归函数用法详解
2020/10/26 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
医学类导师推荐信范文
2013/11/19 职场文书
产品设计开发计划书
2014/05/07 职场文书
2015年中秋放假通知范文
2015/08/18 职场文书
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技