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 new fun的执行过程
Aug 05 Javascript
jQuery给多个不同元素添加class样式的方法
Mar 26 Javascript
js鼠标点击图片切换效果代码分享
Aug 26 Javascript
详细探究ES6之Proxy代理
Jul 22 Javascript
JS设计模式之访问者模式定义与用法分析
Feb 05 Javascript
原生JS实现前端本地文件上传
Sep 08 Javascript
VUE搭建手机商城心得和遇到的坑
Feb 21 Javascript
JS使用栈判断给定字符串是否是回文算法示例
Mar 04 Javascript
Vue实现商品分类菜单数量提示功能
Jul 26 Javascript
解决在Vue中使用axios用form表单出现的问题
Oct 30 Javascript
微信小程序实现watch监听
Jun 04 Javascript
微信小程序实现轮播图指示器
Jun 25 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安装swoole扩展的方法
2015/03/19 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
xml 与javascript结合的问题解决方法
2007/03/24 Javascript
JsDom 编程小结
2011/08/09 Javascript
jQuery easyui datagrid动态查询数据实例讲解
2013/02/26 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
checkbox选中与未选中判断示例
2014/08/04 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
canvas实现手机端用来上传用户头像的代码
2016/10/20 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
2018/01/18 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
2019/03/28 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
小程序实现搜索框功能
2020/03/26 Javascript
JavaScript Array对象基本方法详解
2019/09/03 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
[01:48:04]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第一场 2月7日
2021/03/11 DOTA
用matplotlib画等高线图详解
2017/12/14 Python
python实现换位加密算法的示例
2018/10/14 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
Pytorch 数据加载与数据预处理方式
2019/12/31 Python
Python sorted排序方法如何实现
2020/03/31 Python
必须要使用游标的SQL语句有那些
2012/05/07 面试题
创建索引时需要注意的事项
2013/05/13 面试题
Ajxa常见问题都有哪些
2014/03/26 面试题
建筑实习自我鉴定
2013/10/18 职场文书
优秀应届毕业生自荐信
2013/11/16 职场文书
骨干教师考核评语
2014/12/31 职场文书
音乐之声观后感
2015/06/04 职场文书
大学军训通讯稿(2016最新版)
2015/12/21 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
Python激活Anaconda环境变量的详细步骤
2021/06/08 Python
MySQL笔记 —SQL运算符
2022/01/18 MySQL
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers