今天在给百度的朋友解决客户网站跳转非法页面的问题时, 看到了这么一段代码:
if(window.name != 'cc'){
var r = document.referrer;
r = r.toLowerCase();
var aSites = new Array('sm.','baidu.','soso.','so.','360.','sogou.','gougou.');
var b = false;
for (i in aSites){
if (r.indexOf(aSites[i]) > 0){
b = true;
break;
}
}
if(b)
{
self.location = 'http://www.非法.com';
window.adworkergo = 'cc';
}
}
能看出这段代码使用 document.referrer来获取从哪个页面跳转过来的, 并进行了判断. 我之前是没有用过这个方法的, 看了很多同行的博客之后, 了解到document.referrer关于它的一些情况, 在下面的场景使用时无法获得 referrer 信息.
1. 直接在浏览器中输入地址
2. 使用location.reload()刷新(location.href或者location.replace()刷新有信息)
3. 在微信对话框中,点击进入微信自身浏览器
4. 扫码进入微信或QQ的浏览器
5. 直接新窗口打开一个页面
6. 从https的网站直接进入一个http协议的网站
7. a标签设置rel=“noreferrer”(兼容IE7+)
8. meta标签来控制不让浏览器发送referer
9. 点击 flash 内部链接
10. Chrome4.0以下,IE 5.5+以下返回空的字符串
11. 使用 修改 Location 进行页面导航的方法,会导致在IE下丢失 referrer
12. 跨域
13.<meta content="never" name="referrer">
如果要返回上一级菜单, pc端还有一种方法***history.back()或者history.go(-1)***来进行返回