document.referrer 兼容性

背景

我今天用document.referrer获取上一个链接,emmm....完美解决。但是第二天,在别人电脑上发现始终为空。我的浏览器IE版本11.535.18362,他的电脑是IE11.0.9xxxx,我也想拒绝IE。

document.referrer 兼容性

       首先遇到的问题,是从 HTTPS 页面转到 HTTP 页面后,document.referrer 的值为空。出于安全性考虑,很多网站的一些重要页面(比如淘宝的登录页面)都会使用 HTTPS 协议。如果某个未登录用户在页面 A(HTTP 页面)点击了页面 B(HTTP 页面)的链接,但页面 B 需要用户登录,于是先跳到登录页面 (HTTPS 页面),登录完成之后再跳回 B(HTTP 页面),这时你会发现 B 页面上取不到 document.referrer 了。也就是说,如果想根据 referrer 来还原用户访问路径的话,如果路径中有 HTTP 页面也有 HTTPS 页面,那么这个路径就会在从 HTTPS 到 HTTP 的地方断掉。

操作IE6IE7IE8IE9FirefoxChromeOperaSafari
直接在地址栏输入URL“”“”“”“”“”“”“”“”
从书签访问URL“”“”“”“”“”“”“”“”
从页面A点击超链接,跳转到页面B(target=”_self”)
从页面A点击超链接,跳转到页面B(target=”_blank”)
从页面A右键单击超链接,在新标签页中打开页面B-“”
从页面A右键单击超链接,在新窗口中打开页面B“”
拖动链接到地址栏“”无法拖动无法拖动“”“”“”“”“”
拖动链接到标签栏-“”“”“”“”“”“”“”
使用浏览器的前进、后退按钮
JS 修改 location.href“”“”“”
JS 使用 window.open“”“”“”“”
服务器重定向(302跳转)定向之前的页面定向之前的页面定向之前的页面定向之前的页面定向之前的页面定向之前的页面定向之前的页面定向之前的页面
页面 Meta Refresh“”“”“”“”“”转向页转向页转向页

上表中的“√”表示能正常取到 referrer,”” 表示 referrer 为空。

上表中大部分情况是符合预期的,不过似乎也有几处需要注意的:

1、在 Safari 中,右键打开链接会丢失 referrer;
2、在 IE 中,修改 location.href 或使用 window.open 打开页面会丢失 referrer(IE 9 有一点例外,使用 location.href 跳转不会丢失 referrer);
3、使用 meta 跳转时,IE / Firefox 下会丢失 referrer。

转载:https://www.jb51.net/article/52349.htm

怎么解决?

解决1:

<script>
var url="http://hi.baidu.com";
function goto2(){
        if(document.all){
                document.write("<a id='goa' href='"+url+"' style='display:none;'>a</a>");
                document.getElementByIdx_x("goa").click();
        }else{
                window.location=url;
        }
}
goto2();
</script>

原文链接:https://blog.csdn.net/esonbest1234/article/details/50729417

解决2:

// 判断是否IE
function isIE() {
 return ("ActiveXObject" in window);
}

/**
 * 在IE下面,使用window.loaction.href=url,window.open(url)时,referer会丢失,此时应使用该方法替代
 * window.location.reload()无问题
 *
 * @param {} url 新链接
 * @param {} newTab 是否要打开新窗口
 */
function gotoUrl(url, newTab) {
 if (isIE()) {
  if (newTab) {
   var referLink = document.createElement('a');
   referLink.href = url;
   referLink.target = "_blank";
   document.body.appendChild(referLink);
   referLink.click();
   document.body.removeChild(referLink);
  } else {
   var referLink = document.createElement('a');
   referLink.href = url;
   document.body.appendChild(referLink);
   referLink.click();
  }
 } else {
  if (newTab) {
   window.open(url);
  } else {
   window.location.href = url;
  }
 }
}

原文链接:https://blog.csdn.net/zhao103804/article/details/84807208

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值