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 相关文章推荐
正则表达式语法
Oct 09 Javascript
jMessageBox 基于jQuery的窗口插件
Dec 09 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
Jan 11 Javascript
jQuery对象和Javascript对象之间转换的实例代码
Mar 20 Javascript
seajs中模块的解析规则详解和模块使用总结
Mar 12 Javascript
使用JavaScript实现旋转的彩圈特效
Jun 23 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
Aug 24 Javascript
BootStrap组件之进度条的基本用法
Jan 19 Javascript
详解node.js搭建代理服务器请求数据
Apr 08 Javascript
一个Vue页面的内存泄露分析详解
Jun 25 Javascript
解决vue中post方式提交数据后台无法接收的问题
Aug 11 Javascript
学习RxJS之JavaScript框架Cycle.js
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数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
javascript五图轮播切换实用版
2012/08/17 Javascript
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
2013/05/07 Javascript
js Math 对象的方法
2013/09/01 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
2016/01/18 Javascript
jQuery中ajax错误调试分析
2016/12/01 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
2016/12/15 Javascript
node通过npm写一个cli命令行工具
2017/10/12 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
2017/12/22 Javascript
实例详解ztree在vue项目中使用并且带有搜索功能
2018/08/24 Javascript
[44:58]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第二场
2018/04/06 DOTA
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
2014/01/19 Python
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
Python删除windows垃圾文件的方法
2015/07/14 Python
Python中使用装饰器来优化尾递归的示例
2016/06/18 Python
全面了解Python环境配置及项目建立
2016/06/30 Python
使用Python读取大文件的方法
2018/02/11 Python
Python实现将Excel转换成xml的方法示例
2018/08/25 Python
Django实现从数据库中获取到的数据转换为dict
2020/03/27 Python
python中uuid模块实例浅析
2020/12/29 Python
CSS3控制HTML元素动画效果
2014/02/08 HTML / CSS
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
美国在线家居装饰店:Belle&June
2018/10/24 全球购物
荷兰照明、灯具和配件网上商店:dmlights
2019/08/25 全球购物
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
应届生.NET方向面试题
2015/05/23 面试题
教师自我评价范例
2013/09/24 职场文书
工商技校毕业生自荐信
2013/11/15 职场文书
2014组织生活会方案
2014/05/19 职场文书
城管执法人员纪律作风整顿思想汇报
2014/09/13 职场文书
2014年计生工作总结
2014/11/21 职场文书
2016幼儿园教师节新闻稿
2015/11/25 职场文书
《半截蜡烛》教学反思
2016/02/19 职场文书
PHP控制循环操作的时间
2021/04/01 PHP