// ==UserScript==
// @name 网页屏蔽器 test
// @version 1.2.0
// @description 屏蔽整个网站
// @namespace PPPScript
// @license MIT
// @author PPP
// @include *
// @run-at document-start
// @grant unsafeWindow
// @grant GM_setValue
// @grant GM_getValue
// ==/UserScript==
var PPPbanner = Object.assign(PPPbanner || {}, {top: 0, left: 0});
let hre = window.location.origin;
(function() {
let orig = GM_getValue("PPP_banner_bannedlist");
if(localStorage.PPP_banned_sign == 'true')
GM_setValue("PPP_banner_bannedlist", (typeof orig == 'object' ? (orig[hre] = null, orig) : (orig = {}, orig[hre] = null, orig)));
console.log("PPP 创作的 网页屏蔽器 屏蔽名单:", orig);
})();
(function() {
let orig = GM_getValue("PPP_banner_whitelist");
if(localStorage.PPP_unbanned_sign == 'true')
GM_setValue("PPP_banner_whitelist", (typeof orig == 'object' ? (orig[hre] = null, orig) : (orig = {}, orig[hre] = null, orig)));
console.log("PPP 创作的 网页屏蔽器 白名单:", orig);
})();
if(localStorage.PPP_unbanned_sign != 'true') {
if(localStorage.PPP_banned_sign == 'true') {
let innerHtml = ` <head>
<title>
此网站已被屏蔽
</title>
<link rel="icon" href="https://我是什么东西" type="image/png">
</head>
<body style="position: relative;">
<style>
html {
font-size: 16px;
}
PPP-banner {
top: 1em;
left: 1em;
display: block;
position: fixed;
white-space: nowrap;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
PPP-banner-button:hover {
filter: brightness(87.5%);
}
PPP-banner-button {
cursor: pointer;
border-radius: 0.5em;
padding: 0.25em 0.5em;
display: inline-block;
background-color: white;
border: 1px solid black;
}
hr{
border: 0;
height: 1px;
background-image: linear-gradient(to right, #AAAF, #AAA0);
}
a:link{
text-decoration: none;
}
a:active{
text-decoration: none;
}
a:visited{
text-decoration: none;
}
a:hover{
text-decoration: none;
}
</style>
<PPP-banner>
<PPP-banner-button>取消屏蔽</PPP-banner-button>
</PPP-banner>
<div style="margin-top: 25px; margin-left: 25px;">
<p style="font-size: 3em;">
此网站已被屏蔽
</p>
<hr>
<p style="font-size: 1.5em; color: gray; margin-top: -5px;">
来自 <a href="https://github.com/PPPxcy" target="_blank">PPP</a> 创作的 网页屏蔽器。
</p>
</div>
</body>`;
console.log(`PPP 创作的 网页屏蔽器 已自动屏蔽该网站:${window.location.origin}`);
let last = 1, now, iself, countChange = -1, first = true, dangerLevels = [1000000, 100000, 10000, 3000, 1250, 500, 200, 100, 50, 25, 10, 5, 2, 1];
for(let i = now = setInterval(function() {}, 1); i > last; i--)
clearInterval(i), clearTimeout(i);
last = now;
iself = setInterval(function() {
if(document.documentElement.innerHTML != innerHtml) {
for(let i = now = setInterval(function() {}, 1); i > last; i--)
if(i != iself)
clearInterval(i), clearTimeout(i);
last = now, countChange++, document.documentElement.innerHTML = innerHtml;
if(countChange >= dangerLevels[dangerLevels.length - 1])
console.error(`请确认你的其他脚本没有问题。对抗次数已经达到 ${dangerLevels.pop()} 次。`);
document.querySelector('PPP-banner > PPP-banner-button:last-child').onclick = function() {
if(confirm(`您确定要取消屏蔽该网站吗?(${hre})`) === true) {
let orig = GM_getValue("PPP_banner_bannedlist");
GM_setValue("PPP_banner_bannedlist", typeof orig == 'object' ? (delete orig[hre], orig) : {});
delete localStorage.PPP_banned_sign;
window.location.reload();
}
};
if(first)
innerHtml = document.documentElement.innerHTML, first = false;
}
}, 16);
} else {
let innerHtml = ` <style>
PPP-banner {
top: ${localStorage.PPP_banner_lasttop == undefined ? (localStorage.PPP_banner_lasttop = 16) : localStorage.PPP_banner_lasttop}px;
left: ${localStorage.PPP_banner_lastleft == undefined ? (localStorage.PPP_banner_lastleft = 16) : localStorage.PPP_banner_lastleft}px;
display: block;
position: fixed;
font-size: 16px;
z-index: 998244353;
white-space: nowrap;
pointer-events: none;
font-family: sans-serif;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
PPP-banner-dragger:hover, PPP-banner-button:hover {
filter: brightness(87.5%);
}
PPP-banner-dragger {
width: 2em;
height: 2em;
z-index: 998244353;
position: relative;
border-radius: 0.5em;
pointer-events: auto;
display: inline-block;
vertical-align: middle;
background-color: #555;
}
PPP-banner-dragger:hover {
cursor: grab;
}
PPP-banner-dragger::before {
width: 2em;
height: 2em;
overflow: hidden;
content: "\\FEFF";
border-radius: 1em;
display: inline-block;
background-image: radial-gradient(white, #EEEE 19%, #AAAA 55%, #5555 77%, transparent);
}
PPP-banner-button {
cursor: pointer;
z-index: 998244353;
position: relative;
border-radius: 0.5em;
pointer-events: auto;
display: inline-block;
padding: 0.25em 0.5em;
vertical-align: middle;
background-color: white;
border: 1px solid black;
}
</style>
<PPP-banner>
<PPP-banner-dragger draggable="true" title="拖拽以移动按钮"></PPP-banner-dragger>
<PPP-banner-button>屏蔽该网站</PPP-banner-button>
<PPP-banner-button>隐藏</PPP-banner-button>
</PPP-banner>
`;
console.log(`PPP 创作的 网页屏蔽器 已开启`);
setInterval(function() {
if(document.querySelector('PPP-banner') == null) {
document.body.insertAdjacentHTML("beforeend", innerHtml);
document.documentElement.ondragover = function(event) { event.preventDefault(); };
document.body.querySelector('PPP-banner-dragger').ondragstart = function(event) {
// if(event.x !== undefined)
// console.dir(event);
PPPbanner.top = event.clientY - document.querySelector('PPP-banner').style.top.substr(0, document.querySelector('PPP-banner').style.top.length - 2);
PPPbanner.left = event.clientX - document.querySelector('PPP-banner').style.left.substr(0, document.querySelector('PPP-banner').style.left.length - 2);
};
document.body.querySelector('PPP-banner-dragger').ondragend = function(event) {
document.querySelector('PPP-banner').style.top = Math.min(Math.max(0, localStorage.PPP_banner_lasttop = event.clientY - PPPbanner.top), window.innerHeight - document.body.querySelector('PPP-banner').getBoundingClientRect().height) + 'px';
document.querySelector('PPP-banner').style.left = Math.min(Math.max(0, localStorage.PPP_banner_lastleft = event.clientX - PPPbanner.left), window.innerWidth - document.body.querySelector('PPP-banner').getBoundingClientRect().width) + 'px';
};
document.querySelector('PPP-banner > PPP-banner-button:not(PPP-banner > PPP-banner-button:last-child)').onclick = function(event) {
if(confirm(`您确定要屏蔽该网站吗?(${hre})`) === true) {
localStorage.PPP_banned_sign = 'true';
let orig = GM_getValue("PPP_banner_bannedlist");
GM_setValue("PPP_banner_bannedlist", typeof orig == 'object' ? (orig[hre]= null, orig) : (orig = {}, orig[hre]= null, orig));
window.location.reload();
}
};
document.querySelector('PPP-banner > PPP-banner-button:last-child').onclick = function(event) {
if(confirm(`您确定要取消此按钮吗?(在 ${hre})`) === true) {
if(confirm(`要永久隐藏吗?(否则本次会话会隐藏)`) == true) {
localStorage.PPP_unbanned_sign = 'true';
let orig = GM_getValue("PPP_banner_whitelist");
GM_setValue("PPP_banner_whitelist", typeof orig == 'object' ? (orig[hre]= null, orig) : (orig = {}, orig[hre]= null, orig));
}
document.querySelector('PPP-banner').style.display = 'none';
}
};
setInterval(function() {
document.querySelector('PPP-banner').style.top = Math.min(Math.max(0, localStorage.PPP_banner_lasttop), window.innerHeight - document.body.querySelector('PPP-banner').getBoundingClientRect().height) + 'px';
document.querySelector('PPP-banner').style.left = Math.min(Math.max(0, localStorage.PPP_banner_lastleft), window.innerWidth - document.body.querySelector('PPP-banner').getBoundingClientRect().width) + 'px';
}, 16);
}
}, 16);
}
}
if(!(localStorage.PPP_unbanned_sign != 'true' && localStorage.PPP_banned_sign == 'true')) {
let styles = document.createElement('style');
styles.innerText = `a[href][PPP-banned] { filter: sepia(1); }`;
document.head.appendChild(styles);
setInterval(function() {
let orig = GM_getValue('PPP_banner_bannedlist'), alist = [...document.querySelectorAll('a[href]:not(a[href][PPP-checked])')];
for(let i = 0; i < alist.length; i++) {
if(orig[new URL(alist[i].getAttribute('href'), window.location.href).origin] !== undefined)
alist[i].setAttribute('PPP-banned', ''), alist[i].setAttribute('title', "你屏蔽了它:" + new URL(alist[i].getAttribute('href'), window.location.href).origin + ",对吧?\n\n来自由 PPP 创作的 网页屏蔽器。");
else
alist[i].setAttribute('PPP-checked', '');
}
}, 16);
}