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 相关文章推荐
Js获取事件对象代码
Aug 05 Javascript
javascript自定义右键弹出菜单实现方法
May 25 Javascript
AngularJS基础 ng-submit 指令简单示例
Aug 03 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
Jun 01 Javascript
详解tween.js的使用教程
Sep 14 Javascript
一文让你彻底搞清楚javascript中的require、import与export
Sep 24 Javascript
Angular4实现鼠标悬停3d倾斜效果
Oct 25 Javascript
Vue DevTools调试工具的使用
Dec 05 Javascript
vue源码学习之Object.defineProperty对象属性监听
May 30 Javascript
element-ui 中的table的列隐藏问题解决
Aug 24 Javascript
vue双向绑定数据限制长度的方法
Nov 04 Javascript
vue form表单post请求结合Servlet实现文件上传功能
Jan 22 Vue.js
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
ueditor 1.2.6 使用方法说明
2013/07/24 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
PHP利用二叉堆实现TopK-算法的方法详解
2017/04/24 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
鼠标经过的文本框textbox变色
2009/05/21 Javascript
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
2010/10/14 Javascript
alert出数组中的随即值代码
2014/09/25 Javascript
深入理解jQuery layui分页控件的使用
2016/08/17 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
JS中常用的正则表达式
2016/09/29 Javascript
简单理解js的冒泡排序
2016/12/19 Javascript
JS实现向iframe中表单传值的方法
2017/03/24 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
vue地区选择组件教程详解
2018/05/04 Javascript
js 计算图片内点个数的示例代码
2019/04/04 Javascript
JS多个表单数据提交下的serialize()应用实例分析
2019/08/27 Javascript
解决VUEX的mapState/...mapState等取值问题
2020/07/24 Javascript
详解如何使用React Hooks请求数据并渲染
2020/10/18 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
pandas分别写入excel的不同sheet方法
2018/12/11 Python
关于windows下Tensorflow和pytorch安装教程
2020/02/04 Python
python 读取二进制 显示图片案例
2020/04/24 Python
Python实现数字的格式化输出
2020/08/01 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
2020/10/27 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
Django后端按照日期查询的方法教程
2021/02/28 Python
四方通行旅游网:台湾订房、出国旅游
2017/09/20 全球购物
美国翻新电子产品商店:The Store
2019/10/08 全球购物
解释i节点在文件系统中的作用
2013/11/26 面试题
奶茶店创业计划书范文
2014/01/17 职场文书
告诉你怎样写创业计划书
2014/01/27 职场文书
求职信内容一般写什么?
2015/03/20 职场文书
会议主持词通用版
2019/04/02 职场文书