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 相关文章推荐
五个jQuery图片画廊插件 推荐
May 12 Javascript
js验证电话号码与手机支持+86的正则表达式
Jan 23 Javascript
JavaScript实现弹出子窗口并传值给父窗口
Dec 18 Javascript
JS实现网页滚动条感应鼠标变色的方法
Feb 26 Javascript
javascript 对象数组根据对象object key的值排序
Mar 09 Javascript
JavaScript实现点击按钮就复制当前网址
Dec 14 Javascript
JavaScript实现复制内容到粘贴板代码
Mar 31 Javascript
Ionic快速安装教程
Jun 03 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
Sep 29 Javascript
移动端图片上传旋转、压缩问题的方法
Oct 16 Javascript
详解微信小程序中组件通讯
Oct 30 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
Apr 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 八种基本的数据类型小结
2011/06/01 PHP
PHP读取Excel类文件
2017/05/15 PHP
js 优化次数过多的循环 考虑到性能问题
2011/03/05 Javascript
ASP.NET jQuery 实例9  通过控件hyperlink实现返回顶部效果
2012/02/03 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
jquery实现div拖拽宽度示例代码
2013/07/31 Javascript
关闭浏览器时提示onbeforeunload事件
2013/12/25 Javascript
js报$ is not a function 的问题的解决方法
2014/01/20 Javascript
JQuery Tips相关(1)----关于$.Ready()
2014/08/14 Javascript
jQuery实现带水平滑杆的焦点图动画插件
2016/03/08 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
微信小程序实现人脸检测功能
2018/05/25 Javascript
浅谈Vue render函数在ElementUi中的应用
2018/09/06 Javascript
详解Vue-axios 设置请求头问题
2018/12/06 Javascript
js使用swiper实现层叠轮播效果实例代码
2018/12/12 Javascript
fetch 如何实现请求数据
2018/12/20 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
解决layui checkbox 提交多个值的问题
2019/09/02 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
在Pycharm中设置默认自动换行的方法
2019/01/16 Python
Python实现桌面翻译工具【新手必学】
2020/02/12 Python
css3的图形3d翻转效果应用示例
2014/04/08 HTML / CSS
美国小蜜蜂Burt’s Bees德国官网:天然唇部、皮肤和身体护理产品
2020/06/14 全球购物
领导视察欢迎词
2014/01/15 职场文书
简历上的自我评价怎么写
2014/01/28 职场文书
企业宣传策划方案
2014/05/29 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
2015新年寄语大全
2014/12/08 职场文书
护士年终考核评语
2014/12/31 职场文书
初中团委工作总结
2015/08/13 职场文书
vue3中provide && inject的使用
2021/07/01 Vue.js
Python中Selenium对Cookie的操作方法
2021/07/09 Python
Python 数据结构之十大经典排序算法一文通关
2021/10/16 Python