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 相关文章推荐
javascript 对表格的行和列都能加亮显示
Dec 26 Javascript
简短几句jquery代码的实现一个图片向上滚动切换
Sep 02 Javascript
jquery插件开发方法(初学者)
Feb 03 Javascript
排序算法的javascript实现与讲解(99js手记)
Sep 28 Javascript
深入学习JavaScript中的原型prototype
Aug 13 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
Aug 30 Javascript
微信小程序 前端源码逻辑和工作流详解
Oct 08 Javascript
[原创]js实现保存文本框内容为本地文件兼容IE,chrome,火狐浏览器
Feb 14 Javascript
原生javascript实现连连看游戏
Jan 03 Javascript
vue实现form表单与table表格的数据关联功能示例
Jan 29 Javascript
vue获取时间戳转换为日期格式代码实例
Apr 17 Javascript
vue iview实现动态新增和删除
Jun 17 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 全角转半角实现代码
2010/05/16 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
2014/07/08 PHP
浅谈PHP中的
2016/04/23 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
laravel 数据验证规则详解
2019/10/23 PHP
我也种棵OO树JXTree[js+css+xml]
2007/04/02 Javascript
jquery 按键盘上的enter事件
2014/05/11 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
2014/06/19 Javascript
JQuery自动触发事件的方法
2015/06/13 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
vue.js入门教程之计算属性
2016/09/01 Javascript
js实现下拉菜单效果
2017/03/01 Javascript
关于HTML5的data-*自定义属性的总结
2018/05/05 Javascript
微信小程序仿RadioGroup改变样式的处理方案
2018/07/13 Javascript
微信小程序class封装http代码实例
2019/08/24 Javascript
从零学Python之入门(五)缩进和选择
2014/05/27 Python
python友情链接检查方法
2015/07/08 Python
python正则表达式爬取猫眼电影top100
2018/02/24 Python
PyQt5每天必学之拖放事件
2020/08/27 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
Python列表与元组的异同详解
2019/07/02 Python
Django对数据库进行添加与更新的例子
2019/07/12 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
使用Pycharm分段执行代码
2020/04/15 Python
英国和爱尔兰的自炊式豪华度假小屋:Rural Retreats
2018/06/08 全球购物
Lookfantastic阿联酋官网:英国知名美妆护肤购物网站
2020/05/26 全球购物
2014年合同管理工作总结
2014/12/02 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
护士个人年终总结
2015/02/13 职场文书
2015年幼师个人工作总结
2015/10/15 职场文书
大学军训心得体会800字
2016/01/11 职场文书
mysql中between的边界,范围说明
2021/06/08 MySQL
Python基础数据类型tuple元组的概念与用法
2021/08/02 Python
Windows server 2012 R2 安装IIS服务器
2022/04/29 Servers