js中document.referrer实现移动端返回上一页


Posted in Javascript onFebruary 22, 2017

返回上一页,在PC端我们可以使用:history.go(-1)或者history.back(),可以正常返回第一层。这样,我们不需要上一页的 url 具体是什么,只要使用 history 一般都没啥问题。

但是在移动端,如果想要返回上一页。比如从A页面跳到B页面,如果B页面想返回A页面,为了防止不会跳错,必须要有一个 <  按钮,给它加 history.go(-1) ,返回上一层。

<a href="javascript:history.go(-1)" rel="external nofollow" class="header-back jsBack">返回</a>

那如果我们没有返回上一页的 < 的按钮,在手机上怎么操作才会返回上一页,比如:从微信分享进来的,进入的是微信内页,此时,内页就是第一页,它没有上一页,要怎么返回?这时点返回按钮是没有反应的,不是一个好的用户体验,十有八九的人会误以为是BUG,这绝对是个坑爸的问题。

移动端无论是原生app还是传统的网页,返回上页是一个比较强烈的需求。

javascript 有一个可以获取前一页面的URL地址的方法:document.referrer

document.referrer 的来源

  1. referrer 属性可返回载入当前文档的文档的 URL【摘自W3CSHCOOL】, 如果当前文档不是通过超链接访问的,那么当前文档的URL为NULL,这个属性允许客户端的 javascript 访问 HTTP 头部;
  2. referrer 属性,我们可以从 http 头部获取

document.referrer 的兼容性

document.referrer IE7都支持,它的兼容性比较高,Android 5.0开始支持,iOS都支持,PC端浏览器从IE7就开始支持了,兼容性没有什么大的问题。

但是有个小小的问题,就是 IE 会主动清除 referref 属性。在IE中用javascript做跳转,比如用window.location.href = “”; google如果使用document.referrer无法取到浏览器请求的HTTP referrer,因为IE清空了。而其他主流浏览器Firefox和Chrome都会保留referrer,没办法,只好判断,如果是IE浏览器,就主动给它增加一个 referrer 。这样的原理就是给IE浏览器的页面偷偷加了个链接,然后自动点这个链接,于是referrer就能保留了。

var url = 'https://3water.com'; 
if (/MSIE (\d+\.\d+);/.test(navigator.userAgent) || /MSIE(\d+\.\d+);/.test(navigator.userAgent)) 
{ 
 var referLink = document.createElement('a'); 
 referLink.href = url; 
 document.body.appendChild(referLink); 
 referLink.click(); 
} 
else 
{ 
 location.href = url; 
}

document.referrer 的牛X做法

解决移动端返回上一页的问题,就是上面所说的微信分享的问题?根据【张鑫旭】大神的方法是,既然点击上一页没有反应,就让它返回首页,从首页再进入其它子页面,应该没啥问题。

1.根据 document.referrer 的来源来判断是否有来源信息,如果没有,则返回首页:

if (typeof document.referrer === '') {
 // 没有来源页面信息的时候,改成首页URL地址
 $('.jsBack').attr('href', '/');
}

这样,当再次点击返回按钮时,就可以返回首页了。

2.根据 document.referrer 的来源url 是否为网站的 url,如果判断这个 url 的来路有问题,则屏蔽该 url 下的所有信息,比如不让其显示图片等。可以有效的防止盗链,目前百度统计,google ads统计,CNZZ统计,都是用的这个方法。

无法获取 referrer 信息的情况

下面的场景无法获得 referrer 信息,以下前8条属于【张鑫旭】:

  1. 直接在浏览器中输入地址
  2. 使用location.reload()刷新(location.href或者location.replace()刷新有信息)
  3. 在微信对话框中,点击进入微信自身浏览器
  4. 扫码进入微信或QQ的浏览器
  5. 直接新窗口打开一个页面
  6. 从https的网站直接进入一个http协议的网站(Chrome下亲测)
  7. a标签设置rel="noreferrer"(兼容IE7+)
  8. meta标签来控制不让浏览器发送referer
  9. 点击 flash 内部链接
  10. Chrome4.0以下,IE 5.5+以下返回空的字符串
  11. 使用 修改 Location 进行页面导航的方法,会导致在IE下丢失 referrer,这可能是IE的一个BUG
  12. 跨域

<meta content="never" name="referrer">

怎么解决无法获取 referrer 的情况,还没有很好的方法,尽量避免吧。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
javascript 操作Word和Excel的实现代码
Oct 26 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
Oct 04 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
Oct 11 Javascript
使用script的src实现跨域和类似ajax效果
Nov 10 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
May 25 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
Oct 26 Javascript
AngularJS路由Ui-router模块用法示例
May 29 Javascript
webpack打包并将文件加载到指定的位置方法
Feb 22 Javascript
react配合antd组件实现的管理系统示例代码
Apr 24 Javascript
微信小程序 可搜索的地址选择实现详解
Aug 28 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
Nov 12 Javascript
javaScript中indexOf用法技巧
Nov 26 Javascript
基于JS实现bookstore静态页面的实例代码
Feb 22 #Javascript
angular 动态组件类型详解(四种组件类型)
Feb 22 #Javascript
javascript 使用正则test( )第一次是 true,第二次是false
Feb 22 #Javascript
JavaScript实现256色转灰度图
Feb 22 #Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
Feb 22 #Javascript
微信小程序 扎金花简单实例
Feb 21 #Javascript
angular中的http拦截器Interceptors的实现
Feb 21 #Javascript
You might like
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
PHP xpath提取网页数据内容代码解析
2020/07/16 PHP
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
div+css布局的图片连续滚动js实现代码
2010/05/04 Javascript
jQuery Tools tab使用介绍
2012/07/14 Javascript
js获取键盘按键响应事件(兼容各浏览器)
2013/05/16 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
JavaScript中最简洁的编码html字符串的方法
2014/10/11 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
Bootstrap实现渐变顶部固定自适应导航栏
2020/08/27 Javascript
详解Node.js串行化流程控制
2017/05/04 Javascript
JS闭包的几种常见形式实例详解
2017/09/16 Javascript
Angular实现搜索框及价格上下限功能
2018/01/19 Javascript
vue select组件的使用与禁用实现代码
2018/04/10 Javascript
在JS循环中使用async/await的方法
2018/10/12 Javascript
微信小程序上传图片并等比列压缩到指定大小的实例代码
2019/10/24 Javascript
神经网络相关之基础概念的讲解
2018/12/29 Python
django富文本编辑器的实现示例
2019/04/10 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
python中return的返回和执行实例
2019/12/24 Python
基于Python数据分析之pandas统计分析
2020/03/03 Python
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
美国网上花店:JustFlowers
2017/02/12 全球购物
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
索尼巴西商店:Sony巴西
2019/06/21 全球购物
Carrs Silver官网:英国著名的银器品牌
2020/08/29 全球购物
自荐信写法介绍
2014/01/25 职场文书
群众路线批评与自我批评发言稿
2014/10/16 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
欠款纠纷起诉状
2015/05/19 职场文书
电影红河谷观后感
2015/06/11 职场文书
消防安全主题班会
2015/08/12 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技