背景
我今天用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 的地方断掉。
操作 | IE6 | IE7 | IE8 | IE9 | Firefox | Chrome | Opera | Safari |
---|---|---|---|---|---|---|---|---|
直接在地址栏输入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