-
Notifications
You must be signed in to change notification settings - Fork 34
/
disableThirdpartyAD.user.js
52 lines (51 loc) · 1.45 KB
/
disableThirdpartyAD.user.js
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
// ==UserScript==
// @name disableThirdpartyAD
// @namespace disableThirdpartyAD.xinggsf
// @author xinggsf
// @description 禁止站点的第三方资源,也可加入其它自定义站点
// downloadUrl https://raw.githubusercontent.com/xinggsf/gm/master/disableThirdpartyAD.user.js
// @include http://m.*
// @include http://wap.*
// @include https://m.*
// @include https://wap.*
// @version 2019.6.22
// @encoding utf-8
// @run-at document-start
// ==/UserScript==
"use strict";
if (top == self) {
const host = location.hostname,
urlWhiteList = [],
getUrlHost = url => (new URL(url)).hostname,
getBaseDomain = host => {//取主域名
let a = host.split('.'),
i = a.length -2;
if (['com','tv','net','org','gov','edu'].includes(a[i])) i--;
return a[i];
},
baseHost = /\.\d+$/.test(host) ? host : getBaseDomain(host),
isThirdparty = url => {
if (!url || urlWhiteList.includes(url)) return !1;
return baseHost !== getBaseDomain(getUrlHost(url));
},
delAdNode = e => {
switch (e.tagName) {
case 'SCRIPT':
case 'IFRAME':
if (isThirdparty(e.getAttribute('src'))) e.remove();
break;
/*
case 'IMAGE':
case 'VIDEO':
case 'OBJECT':
case 'EMBED': */
}
};
new MutationObserver(function (rs) {
for (let col of rs) if (col.addedNodes)
for (let e of col.addedNodes) delAdNode(e);
}).observe(document.documentElement, {
childList : true,
subtree : true
});
}