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页面不刷新时全选择,全删除(GridView)
Apr 14 Javascript
javascript Prototype 对象扩展
May 15 Javascript
JQUERY对单选框(radio)操作的小例子
Apr 25 Javascript
代码触发js事件(click、change)示例应用
Dec 13 Javascript
jquery实现非叠加式的搜索框提示效果
Jan 07 Javascript
页面刷新时记住滚动条的位置jquery代码
Jun 17 Javascript
jQuery实现的导航条切换可显示隐藏
Oct 22 Javascript
动态加载jQuery的两种方法实例分析
Jul 17 Javascript
form+iframe解决跨域上传文件的方法
Nov 18 Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
May 31 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
Aug 20 Javascript
JavaScript获取当前url路径过程解析
Dec 27 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
一个ftp类(ini.php)
2006/10/09 PHP
用PHP和ACCESS写聊天室(四)
2006/10/09 PHP
简单的php数据库操作类代码(增,删,改,查)
2013/04/08 PHP
php获取bing每日壁纸示例分享
2014/02/25 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
Smarty3配置及入门语法
2017/02/22 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
php+js实现倒计时功能
2014/06/02 Javascript
原生javascript实现的分页插件pagenav
2014/08/28 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
jQuery分组选择器用法实例
2014/12/23 Javascript
浅谈javascript语法和定时函数
2015/05/03 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
javaScript语法总结
2016/11/25 Javascript
微信小程序开发之选项卡(窗口底部TabBar)页面切换
2017/04/12 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
es6新特性之 class 基本用法解析
2018/05/05 Javascript
js实现简单选项卡功能
2020/03/23 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
用VsCode编辑TypeScript的实现方法
2020/05/07 Javascript
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
python中对list去重的多种方法
2014/09/18 Python
Python编程中用close()方法关闭文件的教程
2015/05/24 Python
通过Python模块filecmp 对文件比较的实现方法
2018/06/29 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
Python Django框架防御CSRF攻击的方法分析
2019/10/18 Python
程序设计HTML5 Canvas API
2013/04/08 HTML / CSS
Fossil美国官网:Fossil手表、手袋、珠宝及配件
2017/02/01 全球购物
教师工作决心书
2015/02/04 职场文书
你有一份《诚信考试承诺书》待领取
2019/11/13 职场文书
CSS3 Tab动画实例之背景切换动态效果
2021/08/23 HTML / CSS
SQL Server数据库基本概念、组成、常用对象与约束
2022/03/20 SQL Server
Java 定时任务技术趋势简介
2022/05/04 Java/Android
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询
2022/05/25 SQL Server