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 jQuery $.post $.ajax用法
Jul 09 Javascript
Javascript 两个窗体之间传值实现代码
Sep 25 Javascript
javascript hashtable 修正版 下载
Dec 30 Javascript
javascript弹性运动效果简单实现方法
Jan 08 Javascript
AngularJs 延时器、计时器实例代码
Sep 16 Javascript
详解webpack多页面配置记录
Jan 22 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
Jan 31 Javascript
基于IView中on-change属性的使用详解
Mar 15 Javascript
Node 升级到最新稳定版的方法分享
May 17 Javascript
Layui Table js 模拟选中checkbox的例子
Sep 03 Javascript
vue3.0搭配.net core实现文件上传组件
Oct 29 Javascript
angular *Ngif else用法详解
Dec 15 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
laravel安装zend opcache加速器教程
2015/03/02 PHP
php进程间通讯实例分析
2016/07/11 PHP
js操作Xml(向服务器发送Xml,处理服务器返回的Xml)(IE下有效)
2009/01/30 Javascript
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
javascript获取作用在元素上面的样式属性代码
2012/09/20 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
2012/12/07 Javascript
A标签中通过href和onclick传递的this对象实现思路
2013/04/19 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
javascript判断网页是关闭还是刷新
2015/09/12 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
2016/09/24 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
详解vue-cli之webpack3构建全面提速优化
2017/12/25 Javascript
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
2019/09/03 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
javascript 代码是如何被压缩的示例代码
2020/05/06 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
使用vue3重构拼图游戏的实现示例
2021/01/25 Vue.js
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
pytyon 带有重复的全排列
2013/08/13 Python
Python Sql数据库增删改查操作简单封装
2016/04/18 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
Python3内置函数chr和ord实现进制转换
2020/06/05 Python
TensorFlow-gpu和opencv安装详细教程
2020/06/30 Python
Chupi官网:在爱尔兰手工制作的订婚、结婚戒指和精美珠宝
2020/09/28 全球购物
Delphi CS笔试题
2014/01/04 面试题
大专生工程监理求职信
2013/10/04 职场文书
大学生最常用的自我评价
2013/12/07 职场文书
大学计划书范文800字
2014/08/14 职场文书
科学育儿宣传标语
2014/10/08 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
JDBC连接的六步实例代码(与mysql连接)
2021/05/12 MySQL
js中Object.create实例用法详解
2021/10/05 Javascript