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 相关文章推荐
JavaScript中prototype为对象添加属性的误区介绍
Oct 15 Javascript
javascript获取文档坐标和视口坐标
May 26 Javascript
jQuery实现类似老虎机滚动抽奖效果
Aug 06 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
Sep 14 Javascript
JS如何判断json是否为空
Jul 06 Javascript
javascript轮播图算法
Oct 21 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
Dec 31 Javascript
vue+vux实现移动端文件上传样式
Jul 28 Javascript
vue学习笔记之v-if和v-show的区别
Sep 20 Javascript
深入浅出理解JavaScript高级定时器原理与用法
Aug 02 Javascript
layui实现table加载的示例代码
Aug 14 Javascript
Vue.js中Line第三方登录api的实现代码
Jun 29 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分页实例代码分享
2011/07/28 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
2015/02/10 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
2017/03/15 PHP
PHP基于XMLWriter操作xml的方法分析
2017/07/17 PHP
PHP常用字符串函数用法实例总结
2020/06/04 PHP
删除节点的jquery代码
2014/01/13 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
js实现YouKu的漂亮搜索框效果
2015/08/19 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
2015/10/23 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
jQuery+ajax读取并解析XML文件的方法
2016/09/09 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
vue技术分享之你可能不知道的7个秘密
2018/04/09 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
Python下singleton模式的实现方法
2014/07/16 Python
python实现斐波那契递归函数的方法
2014/09/08 Python
Python中的高级数据结构详解
2015/03/27 Python
Python基于Tkinter实现的记事本实例
2015/06/17 Python
Python内置函数OCT详解
2016/11/09 Python
flask框架视图函数用法示例
2018/07/19 Python
Python二叉树的镜像转换实现方法示例
2019/03/06 Python
如何用Python做一个微信机器人自动拉群
2019/07/03 Python
10个顶级Python实用库推荐
2021/03/04 Python
我的中国梦演讲稿800字
2014/08/19 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书
《从现在开始》教学反思
2016/02/16 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书
2019最新版股权转让及委托持股协议书范本
2019/08/07 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python
python识别围棋定位棋盘位置
2021/07/26 Python