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的面向对象(二)
Nov 09 Javascript
用Juery网页选项卡实现代码
Jun 13 Javascript
Jquery获得控件值的三种方法总结
Feb 13 Javascript
$.each遍历对象、数组的属性值并进行处理
Jul 18 Javascript
JS中三目运算符和if else的区别分析与示例
Nov 21 Javascript
JavaScript动态改变表格单元格内容的方法
Mar 30 Javascript
JQuery给select添加/删除节点的实现代码
Apr 26 Javascript
vue-cli开发环境实现跨域请求的方法
Apr 07 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
Sep 30 Javascript
如何使用VuePress搭建一个类型element ui文档
Feb 14 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
Mar 07 Javascript
Vue实现base64编码图片间的切换功能
Dec 04 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实现生成唯一编号(36进制的不重复编号)
2014/07/01 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
快速解决PHP调用Word组件DCOM权限的问题
2017/12/27 PHP
XRegExp 0.2: Now With Named Capture
2007/11/30 Javascript
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
jquery自定义表格样式
2015/11/23 Javascript
ClearTimeout消除闪动实例代码
2016/02/29 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
2017/01/19 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
JavaScript手风琴页面制作
2017/05/17 Javascript
JS解决position:sticky的兼容性问题的方法
2017/10/17 Javascript
全新打包工具parcel零配置vue开发脚手架
2018/01/11 Javascript
JavaScript中toLocaleString()和toString()的区别实例分析
2018/08/14 Javascript
微信小程序实现搜索框功能及踩过的坑
2020/06/19 Javascript
Python2.x和3.x下maketrans与translate函数使用上的不同
2015/04/13 Python
Python连接PostgreSQL数据库的方法
2016/11/28 Python
pycharm重置设置,恢复默认设置的方法
2018/10/22 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
Python定时发送天气预报邮件代码实例
2019/09/09 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
2021/01/28 Python
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
阿玛尼美妆加拿大官方商城:Giorgio Armani Beauty加拿大
2017/10/24 全球购物
日本最大级玩偶手办购物:あみあみ Amiami
2018/04/23 全球购物
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
GWT (Google Web Toolkit)有哪些主要的原件组成?
2015/06/08 面试题
校长就职演讲稿
2014/01/06 职场文书
如何写你的创业计划书
2014/01/07 职场文书
运动会广播稿30字
2014/01/21 职场文书
应届毕业生个人求职信范文
2014/01/29 职场文书
公务员转正考察材料
2014/02/07 职场文书
培训专员岗位职责
2014/02/26 职场文书
企业委托书范本
2014/09/13 职场文书
2014业务员年终工作总结
2014/12/09 职场文书
少先队中队工作总结2015
2015/07/23 职场文书
启动Tomcat时出现大量乱码的解决方法
2021/06/21 Java/Android