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 相关文章推荐
子窗口、父窗口和Silverlight之间的相互调用
Aug 16 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
Aug 24 Javascript
php对mongodb的扩展(初识如故)
Nov 11 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
Nov 26 Javascript
jquery删除提示框弹出是否删除对话框
Jan 07 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
Apr 06 Javascript
jquery按回车键实现表单提交的简单实例
May 25 Javascript
JS操作input标签属性checkbox全选的实现代码
Mar 02 Javascript
Angular2 http jsonp的实例详解
Aug 31 Javascript
微信小程序左右滑动的实现代码
Dec 15 Javascript
JavaScript函数的特性与应用实践深入详解
Dec 30 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
Sep 26 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中include文件变量作用域
2015/06/18 PHP
PHP使用自定义方法实现数组合并示例
2016/07/07 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
关于php unset对json_encode的影响详解
2018/11/14 PHP
YII2框架中添加自定义模块的方法实例分析
2020/03/18 PHP
脚本吧 - 幻宇工作室用到js,超强推荐share.js
2006/12/23 Javascript
JavaScript多线程的实现方法
2007/05/08 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
jquery对dom的操作常用方法整理
2013/06/25 Javascript
JS防止用户多次提交的简单代码
2013/08/01 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
jQuery中多个元素的Hover事件解决方案
2014/06/12 Javascript
简介JavaScript中fixed()方法的使用
2015/06/08 Javascript
详解JavaScript的Polymer框架中的通知交互
2015/07/29 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
2016/05/10 Javascript
星期几的不同脚本写法(推荐)
2016/06/01 Javascript
zTree实现节点修改的实时刷新功能
2017/03/20 Javascript
javaScript之split与join的区别(详解)
2017/11/08 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
详解Python中break语句的用法
2015/05/14 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
2017/11/15 Python
Python实现求数列和的方法示例
2018/01/12 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
使用python脚本自动创建pip.ini配置文件代码实例
2019/09/20 Python
python命令 -u参数用法解析
2019/10/24 Python
在keras中实现查看其训练loss值
2020/06/16 Python
很酷的小工具和电子产品商城:GearBest
2016/11/19 全球购物
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
VC++笔试题
2014/10/13 面试题
教师中国梦演讲稿
2014/04/23 职场文书
负责人任命书范本
2014/06/04 职场文书
2015年学校远程教育工作总结
2015/07/20 职场文书
Python中的pprint模块
2021/11/27 Python