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 相关文章推荐
日期 时间js控件
May 07 Javascript
Javascript 文件夹选择框的两种解决方案
Jul 01 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
Sep 20 Javascript
js 判断浏览器使用的语言示例代码
Mar 22 Javascript
node.js中的path.basename方法使用说明
Dec 09 Javascript
浅析javascript中的DOM
Mar 01 Javascript
javascript实现删除前弹出确认框
Jun 04 Javascript
Javascript中的作用域和上下文深入理解
Jul 03 Javascript
Angular2 (RC5) 路由与导航详解
Sep 21 Javascript
使用JavaScript获取Request中参数的值方法
Sep 27 Javascript
Bootstrap Modal遮罩弹出层(完整版)
Nov 21 Javascript
JavaScript变速动画函数封装添加任意多个属性
Apr 03 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
第十二节 类的自动加载 [12]
2006/10/09 PHP
php4的session功能评述(二)
2006/10/09 PHP
使用PHP计算两个路径的相对路径
2013/06/14 PHP
领悟php接口中interface存在的意义
2013/06/27 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
PHP常用字符串函数用法实例总结
2020/06/04 PHP
Jquery 插件学习实例1 插件制作说明与tableUI优化
2010/04/02 Javascript
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
React Native使用百度Echarts显示图表的示例代码
2017/11/07 Javascript
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
微信小程序封装分享与分销功能过程解析
2019/08/13 Javascript
微信小程序收藏功能的实现代码
2020/06/19 Javascript
Vite和Vue CLI的优劣
2021/01/30 Vue.js
python连接mysql调用存储过程示例
2014/03/05 Python
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
使用Python操作excel文件的实例代码
2017/10/15 Python
Python中turtle作图示例
2017/11/15 Python
python reduce 函数使用详解
2017/12/05 Python
python处理csv数据动态显示曲线实例代码
2018/01/23 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
2018/12/14 Python
谈一谈基于python的面向对象编程基础
2019/05/21 Python
python实现列表的排序方法分享
2019/07/01 Python
利用Python实现Excel的文件间的数据匹配功能
2020/06/16 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
泰国第一的化妆品网站:Konvy
2018/02/25 全球购物
简历上的自我评价
2014/02/03 职场文书
保护母亲河倡议书
2014/04/14 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
微软Win11有哪些隐藏功能? windows11多个功能汇总
2021/11/21 数码科技
使用python求解迷宫问题的三种实现方法
2022/03/17 Python