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 各浏览器的 Javascript 效率对比
Jan 23 Javascript
基于jquery的鼠标拖动效果代码
May 30 Javascript
Javascript在IE和FireFox中的不同表现简析
Dec 03 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
Oct 30 Javascript
JavaScript数据结构与算法之栈详解
Mar 12 Javascript
JS+CSS实现美化的下拉列表框效果
Aug 11 Javascript
js实现添加删除表格(两种方法)
Apr 27 Javascript
bootstrap的常用组件和栅格式布局详解
May 02 Javascript
使用 Node.js 对文本内容分词和关键词抽取
May 27 Javascript
Vue.JS项目中5个经典Vuex插件
Nov 28 Javascript
浅谈javascript中的prototype和__proto__的理解
Apr 07 Javascript
JavaScript Window窗口对象属性和使用方法
Jan 19 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 字符串替换的方法
2012/01/10 PHP
php模仿asp Application对象在线人数统计实现方法
2015/01/04 PHP
yii去掉必填项中星号的方法
2015/12/28 PHP
JS支持带x身份证号码验证函数
2008/08/10 Javascript
JQuery select标签操作代码段
2010/05/16 Javascript
6款经典实用的jQuery小插件及源码(对话框/提示工具等等)
2013/02/04 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
js中function()使用方法
2013/12/24 Javascript
用js读、写、删除Cookie代码续篇
2014/12/03 Javascript
jQuery实现提示密码强度的代码
2015/07/15 Javascript
JS实现选中当前菜单后高亮显示的导航条效果
2015/10/15 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
深入理解React高阶组件
2017/09/28 Javascript
Vue-cli@3.0 插件系统简析
2018/09/05 Javascript
微信小程序实现发送模板消息功能示例【通过openid推送消息给用户】
2019/05/05 Javascript
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
Python中使用dom模块生成XML文件示例
2015/04/05 Python
Python正则表达式知识汇总
2017/09/22 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
2018/12/28 Python
python实现网站用户名密码自动登录功能
2019/08/09 Python
Python阶乘求和的代码详解
2020/02/14 Python
python3利用Axes3D库画3D模型图
2020/03/25 Python
详解Python中pyautogui库的最全使用方法
2020/04/01 Python
美国在线宠物商店:Chewy
2019/01/12 全球购物
实习生自我鉴定
2013/12/12 职场文书
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
体育教师个人的自我评价
2014/02/16 职场文书
教育技术职业规划范文
2014/03/04 职场文书
音乐之声音乐广播稿
2014/09/10 职场文书
企业财务人员岗位职责
2015/04/14 职场文书
2016年国庆节67周年活动总结
2016/04/01 职场文书
2019最新版火锅店的创业计划书 !
2019/07/12 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
JS 基本概念详细介绍
2021/10/16 Javascript