IE中JS跳转丢失referrer问题的2个解决方法


Posted in Javascript onJuly 18, 2014

曾整理过一个各种页面跳转方法中referrer丢失的情况,其中提到,在IE中,使用类似 location.href = "a.html"这样的方式跳转页面时,在目标页面中 document.referrer的值会是空。这应该是IE的一个 bug。

大多数情况下,这个问题不会给我们带来麻烦,但有时候我们不得不用JavaScript来跳转,同时又要在下一个页面收集 document.refer,这时就得想想其他办法了。

Form GET方法

首先想到的是使用Form表单,用JS发起一个GET请求。代码类似下面这样:

function goToPage(url) {

    if (isIE) {

        // IE浏览器

        var frm = document.createElement("form");

        frm.action = url;

        frm.method = "GET";

        document.body.appendChild(frm);

        frm.submit();

    } else {

        // 非IE

        location.href = url;

    }

}

这个方法可以如同预期地工作,目标页面中 document.referrer能正常指向上一个页面。

A元素模拟点击方法

网上搜索了一下,发现司徒正美的博客上记录了这个问题的另一个处理方法:

//define for all browsers

function goto(url) {

    location.href = url;

}
//re-define for IE

if (isIE) {

    function goto(url) {

        var referLink = document.createElement('a');

        referLink.href = url;

        document.body.appendChild(referLink);

        referLink.click();

    }

}

原理很简单,先创建了一个 A元素,指定其 href属性为目标链接,然后再使用JS触发它的点击事件。经测试,在目标页面也能正常取到 document.referrer。

这个方法代码更简短一点,应该比上面的使用 form表单的方案更好一些。

Javascript 相关文章推荐
五段实用的js高级技巧
Dec 20 Javascript
jQuery选择器中含有空格的使用示例及注意事项
Aug 25 Javascript
javascript使用数组的push方法完成快速排序
Sep 15 Javascript
基于jquery和svg实现超炫酷的动画特效
Dec 09 Javascript
jQuery实现的网格线绘制方法
Jun 20 Javascript
node.js中 stream使用教程
Aug 28 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
Dec 07 Javascript
jQuery实现动态给table赋值的方法示例
Jul 04 jQuery
Angular模版驱动表单的使用总结
May 05 Javascript
详解Axios 如何取消已发送的请求
Oct 20 Javascript
javascript中floor使用方法总结
Feb 02 Javascript
jQuery实现的图片点击放大缩小功能案例
Jan 02 jQuery
JavaScript中的document.referrer在各种浏览器测试结果
Jul 18 #Javascript
javascript的document.referrer浏览器支持、失效情况总结
Jul 18 #Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
Jul 18 #Javascript
JQuery对表单元素的基本操作使用总结
Jul 18 #Javascript
jQuery新的事件绑定机制on()示例应用
Jul 18 #Javascript
jQuery中attr()和prop()在修改checked属性时的区别
Jul 18 #Javascript
$.each遍历对象、数组的属性值并进行处理
Jul 18 #Javascript
You might like
如何对PHP程序中的常见漏洞进行攻击(下)
2006/10/09 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
2015/12/07 PHP
jQuery EasyUI API 中文文档 - ComboTree组合树
2011/10/11 Javascript
js获取表格的行数和列数的方法
2015/10/23 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
protractor的安装与基本使用教程
2017/07/07 Javascript
vue项目中使用axios上传图片等文件操作
2017/11/02 Javascript
解决vue this.$forceUpdate() 处理页面刷新问题(v-for循环值刷新等)
2018/07/26 Javascript
vue图片上传本地预览组件使用详解
2019/02/20 Javascript
Node.js 多进程处理CPU密集任务的实现
2019/05/26 Javascript
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
js实现简单抽奖功能
2020/11/24 Javascript
vue实现简单全选和反选功能
2020/09/15 Javascript
Python压缩和解压缩zip文件
2015/02/14 Python
python实现杨辉三角思路
2017/07/14 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
对python中UDP,socket的使用详解
2019/08/22 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
python 批量将中文名转换为拼音
2021/02/07 Python
日语系毕业生推荐信
2013/11/11 职场文书
文员试用期转正自我鉴定
2014/09/14 职场文书
场地使用证明模板
2014/10/25 职场文书
打架检讨书
2015/01/27 职场文书
社区重阳节活动总结
2015/03/24 职场文书
2015秋学期开学寄语
2015/05/28 职场文书
教师外出学习心得体会
2016/01/18 职场文书
Pandas搭配lambda组合使用详解
2022/01/22 Python
mongoDB数据库索引快速入门指南
2022/03/23 MongoDB