为什么你的document.referrer显示为空

在前不久,本人做了一个拦截恶意网站的油猴脚本

如果你想用,戳我

源代码在这里:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// ==UserScript==
// @name LiangYin_Anti-Hooligan
// @namespace https://liangyin.xyz/
// @version 0.1
// @description 拒绝垃圾网站!拒绝垃圾广告!
// @author LiangYin
// @include http://*
// @include https://*
// @require http://code.jquery.com/jquery-3.4.1.min.js
// @grant none
// ==/UserScript==

(function () {
'use strict';
//流氓网站模块
var domain = window.location.href;
var refere = document.referrer;
var num;
var malicious = new Array();
malicious[0] = "2345.com/";
malicious[1] = "360.com/";
malicious[2] = "2345.cc/";
malicious[3] = "duote.com/";
malicious[4] = "xiaobaixitong.com/";
malicious[5] = "yunjingup.com/";
malicious[6] = "hanboshi.com/";
malicious[7] = "heisha.net/";
malicious[8] = "windowszj.com/";
malicious[9] = "baiyunxitong.com/";
malicious[10] = "dafanqie.net/";
malicious[11] = "heiyunxitong.com/";
malicious[12] = "xiaomaxitong.com/";
malicious[13] = "sdxitong.com/";
malicious[14] = "dabaicaixitong.com/";
for (num in malicious) {
if (refere == "https://service.liangyin.xyz/?url=" + domain) {
break;
}
else if (domain.search(malicious[num]) != -1 && domain.search("service.liangyin.xyz") == -1)
{
window.open("http://service.liangyin.xyz?url=" + domain, "_self");
}
}
//广告模块
var adurl = new Array();
var num1;
adurl[0] = "https://www.3dmgame.com/";
for (num1 in adurl) {
if (domain.search(adurl[num1]) != -1) {
$("#index_bg_box").remove();
$("#ad_3c").remove();
$("#_e1a8tpg1jlj").remove();
$("_x8ouszk7wyb").remove();
$("").remove();
$("").remove();
$("").remove();
$("").remove();
$("div[style=‘’]").remove();
}
}
// Your code here...
})();

其中 http://service.liangyin.xyz?url= 是拦截的URL,其中,作为网址拦截,

肯定有一个解除一次拦截的功能,而如何记录,我第一反应就是判断referrer,正好JS给我们提供

了referrer的获取方式:document.referrer,但当获取的时候,失败了,经过很久的分析,我发

现是因为http链接重定向到了https链接而导致的.根据常识与本次的经验,所以我总结出了获取失败的点:

  • 不是从其它页面跳转
  • 从HTTP链接重定向到了HTTPS

那么如果你也出现了document.referrer为NULL的情况,就请检查一下了!

PS:当时的情况是通过domain方式获取当前访问域名,而不会获取到http/https链接,因此

window.location.href方法获取到了http/https因此解决了HTTP->HTTPS的referrer为

NULL的问题。