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 相关文章推荐
对xmlHttp对象的理解
Jan 17 Javascript
用Mootools获得操作索引的两种方法分享
Dec 12 Javascript
js实现iframe跨页面调用函数的方法
Dec 13 Javascript
Javascript基础教程之数据类型 (数值 Number)
Jan 18 Javascript
JavaScript获取网页中第一个图片id的方法
Apr 03 Javascript
JavaScript事件处理的方式(三种)
Apr 26 Javascript
Vue.js自定义指令的用法与实例解析
Jan 18 Javascript
Vue实现选择城市功能
May 27 Javascript
Vue filters过滤器的使用方法
Jul 14 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
Sep 22 Javascript
AjaxFileUpload.js实现异步上传文件功能
Apr 19 Javascript
JavaScript的查询机制LHS和RHS解析
Aug 16 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入门速成教程
2007/03/19 PHP
php解析url的三个示例
2014/01/20 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
PHP连接MYSQL数据库实例代码
2016/01/20 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
PHP实现负载均衡session共享redis缓存操作示例
2018/08/22 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
JS拖动技术 关于setCapture使用
2010/12/09 Javascript
JavaScript中发布/订阅模式的简单实例
2014/11/05 Javascript
JavaScript获取网页中第一个图片id的方法
2015/04/03 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
2016/12/13 Javascript
layui选项卡效果实现代码
2017/05/19 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
Vue.js实现分页查询功能
2020/11/15 Javascript
Vue2仿淘宝实现省市区三级联动
2020/04/15 Javascript
Vue在页面数据渲染完成之后的调用方法
2018/09/11 Javascript
安装多版本Vue-CLI的实现方法
2020/03/24 Javascript
基于jsbarcode 生成条形码并将生成的条码保存至本地+源码
2020/04/27 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
2020/07/13 Javascript
微信小程序使用前置摄像头拍照
2020/10/22 Javascript
python实现发送邮件功能
2017/07/22 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
python3实现斐波那契数列(4种方法)
2019/07/15 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
python datetime时间格式的相互转换问题
2020/06/11 Python
Python如何绘制日历图和热力图
2020/08/07 Python
python如何实时获取tcpdump输出
2020/09/16 Python
五分钟学会怎么用python做一个简单的贪吃蛇
2021/01/12 Python
苹果音乐订阅:Apple Music
2018/08/02 全球购物
西班牙在线宠物食品和配件商店:bitiba
2019/10/11 全球购物
班班通项目实施方案
2014/02/25 职场文书
班干部演讲稿
2014/04/24 职场文书
红领巾广播站广播稿
2014/10/19 职场文书
幼儿园教师师德表现自我评价
2015/03/05 职场文书
老乡聚会通知
2015/04/23 职场文书