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 相关文章推荐
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
Apr 17 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
Apr 02 Javascript
JS实现可拖曳、可关闭的弹窗效果
Sep 26 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
Jun 17 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
Oct 15 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
Feb 20 Javascript
JS异步加载的三种实现方式
Mar 16 Javascript
jQuery实现左右滑动的toggle方法
Mar 03 jQuery
浅谈vue中.vue文件解析流程
Apr 24 Javascript
基于Vue实现电商SKU组合算法问题
May 29 Javascript
json字符串对象转换代码实例
Sep 28 Javascript
JS中的变量作用域(console版)
Jul 18 Javascript
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单文件版在线代码编辑器
2015/03/12 PHP
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
2016/08/23 PHP
ThinkPHP实现分页功能
2017/04/28 PHP
Javascript attachEvent传递参数的办法
2009/12/14 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
2014/05/11 Javascript
js格式化时间的方法
2015/12/18 Javascript
jQuery实现点击水纹波动动画
2016/04/10 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
JS双击变input框批量修改内容
2016/12/12 Javascript
jQuery插件扩展操作入门示例
2017/01/16 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
JavaScript表单即时验证 验证不成功不能提交
2017/08/31 Javascript
vue脚手架中配置Sass的方法
2018/01/04 Javascript
JavaScript箭头函数中的this详解
2019/06/19 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
[01:15:36]加油刀塔第二期网络版
2014/08/09 DOTA
[07:54]DOTA2-DPC中国联赛 正赛 iG vs VG 选手采访
2021/03/11 DOTA
最基础的Python的socket编程入门教程
2015/04/23 Python
python判断图片宽度和高度后删除图片的方法
2015/05/22 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
2019/06/18 Python
python2与python3爬虫中get与post对比解析
2019/09/18 Python
如何关掉pycharm中的python console(图解)
2019/10/31 Python
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
Ivory Isle Designs美国/加拿大:婚礼和活动文具公司
2018/08/21 全球购物
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
大整数数相乘的问题
2012/07/22 面试题
JAVA程序员自荐书
2014/01/30 职场文书
研修心得体会
2014/09/04 职场文书
义卖募捐活动总结
2015/05/09 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书
Mac环境Nginx配置和访问本地静态资源的实现
2021/03/31 Servers