`

IE中使用location.href跳转丢失referrer的问题

 
阅读更多

曾整理过一个各种页面跳转方法中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; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
functiongoToPage(url){
if(isIE){
// IE浏览器
varfrm=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(); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//define for all browsers
functiongoto(url){
location.href=url;
}
 
//re-define for IE
if(isIE){
functiongoto(url){
varreferLink=document.createElement('a');
referLink.href=url;
document.body.appendChild(referLink);
referLink.click();
}
}

原理很简单,先创建了一个 A元素,指定其 href属性为目标链接,然后再使用JS触发它的点击事件。经测试,在目标页面也能正常取到 document.referrer

这个方法的原始出处在这里:http://webbugtrack.blogspot.com/2008/11/bug-421-ie-fails-to-pass-http-referer.html

分享到:
评论

相关推荐

    IE下通过a实现location.href 获取referer的值

    IE下采用[removed].href方式跳转的话,referer值为空在标签a里面的跳转的话referer就不会空,下面是具体的实现代码

    IE中JS跳转丢失referrer问题的2个解决方法

    曾整理过一个各种页面跳转方法中referrer丢失的情况,其中提到,在IE中,使用类似 location.href = “a.html”这样的方式跳转页面时,在目标页面中 document.referrer的值会是空。这应该是IE的一个 bug。 大多数情况...

    获得当前页面的url

    window.location.href location.search; //获取url中"?"符后的字串 document.referrer 获取来路的url,相当于php的$_SERVER['HTTP_REFERER']。 encodeURIComponent() 对url进行转定义,相当于php的urlencode()...

    IE下document.referrer 拒绝访问的解决方法

    但是在IE中用javascript做跳转,比如用[removed].href=“”; 跳转到的页面无法取到浏览器请求的HTTP referrer,IE浏览器会报脚本错误“拒绝访问”,因为IE清空了document.referrer。 而其他主流浏览器Firefox和...

    JavaScript中的document.referrer在各种浏览器测试结果

    主要介绍了JavaScript中的document.referrer在各种浏览器测试结果,包括在多种情况下每个浏览器能否用document.referrer取到值,非常珍贵的测试结果,需要的朋友可以参考下

    返回上一页面并刷新

    在管理系统开发中,经常遇到列表页面-跳转到某一记录的业务操作详细页面,操作完成之后需要回返列表页面需要刷新,使用window.history.back(); window.history.go(-1); 只能是回返目的,而未能刷新;使用self....

    javascript document.referrer 用法

    [removed] [removed](document.referrer); [removed] </body> 3. 则在通过a.html中的超链接访问b.html的时候,显示的结果是: http://127.0.0.1:8180/a.html 说明: 经过测试,需要将两个文件放在服务器中...

    Javascript中document.referrer隐藏来源的方法

    前言 本文为大家讲解的是关于Javascript中document.referrer隐藏来源的方法探讨,感兴趣的...实际中使用在广告相关业务中较多,包括推广等。 举个例子: 比如我们从百度中跳转到w3c,那我们从w3c中可以获取到referrer,

    monkeys-referrer:Node.js Express Web应用程序的引荐来源网址解析库

    #猴子推荐人monkeys-referrer是用于node.js / express Web应用程序的引荐来源... url (字符串)是页面url,等效于客户端javascript的[removed].href或express.js req.url Referrer (string)是引荐来源网址,等效

    javascript的document.referrer浏览器支持、失效情况总结

    在流量统计服务中都有Traffic source这个功能。Traffic source是针对访次级别的概念,换句话说,当访次建立的时候,landing page的流量来源即是该访次的Traffic source。虽然Traffic source有很多...从使用意义上来说do

    rfc3984(For264).txt

    rfc3984中文版文档,RTP协议最详细的官方文档,其中关键部分已翻译成中文

    JavaScript中document.referrer的用法详解

    URL属性包含页面完整的URL,domain属性中只包含页面的域名,而referrer属性中则保存着链接到当前页面的那个页面的URL。 前面两个很好理解,而referrer属性简单来说就是上一个页面的URL。那么这个属性具体有什么用处...

    让https网站发送 referrer https 与 http 跳转 referer 的问题

    最近网站改版很多时候发现广告客户提示找不到来自我们网站的数据,原来是因为我们最近升级了https导致,经过搜索找到如下解决方法,需要的朋友可以参考下

    js中document.referrer实现移动端返回上一页

    这样,我们不需要上一页的 url 具体是什么,只要使用 history 一般都没啥问题。 但是在移动端,如果想要返回上一页。比如从A页面跳到B页面,如果B页面想返回A页面,为了防止不会跳错,必须要有一个 < 按钮,给它...

    主要搜索引擎referrer参数.pdf

    主要搜索引擎referrer参数.pdf

    精通JavaScript

    • 7.3.htm 字符串中使用转义字符 • 7.4.htm document.write()与alert() • 7.5.htm unescape()函数的使用 • 7.6.htm escape()函数的使用 • 7.7.htm 进制转换 • 7.8....

Global site tag (gtag.js) - Google Analytics