首先,没错,我承认这种事情很不道德,毕竟别人写一些优质博文,挂一些广告也是理所应当的——毕竟你也没花钱订阅这个博客,白嫖反倒还有理了?
但是问题是,你想让我关掉广告插件本身是没问题的,有问题的在你的做法。其他网站一般会出一个 Banner 或者弹窗提示你添加例外,你可以选择不添加而且可以照常浏览网页。但是你却选择了直接清空博客主内容,直接清空啊!还不是像一些实现把它隐藏起来!
既然如此,休怪我不仁不义。
首先,网站会尝试加载 /blog/checker.js .
这个脚本负责检查广告图片是否被加载,如果没有加载(或者被设置为隐藏)则直接清空主内容区并显示屏蔽页面。当然 AdBlock 是顺带把这个脚本加载拦截了。然而,这一段代码也出现在了 document
当中,使得这个拦截失去意义。
那么,操起油猴脚本,准备突入!
首先代码会检查文档中是否有来自路径 http://www.ruanyifeng.com/blog/images
的图片;这个路径是用于存放广告图片的(博客正文的图片则存放在 http://www.ruanyifeng.com/blogimg/
下);如果没有图片或者图片被隐藏则触发清空代码,移除所有内容。
这个脚本会给自己延时 1 秒后执行。
那么这个 1 秒的延时已经足够我们搞事情了,油猴脚本如下:
// ==UserScript==
// @name CheeseAndCracker
// @namespace http://tampermonkey.net/
// @version 0.1
// @description clear some obstacles
// @author someone
// @match http://www.ruanyifeng.com/blog/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
for(let i = 0; i < 1000; i++) {
clearTimeout(i);
clearInterval(i);
}
})();
是的,很无脑暴力——毕竟,博客内容是完全静态的,直接取消所有计时器也未尝不可。或者干脆禁止页面运行 JavaScript 也可以。
当然我还是添加了广告屏蔽例外的 = = 请不要质疑我的为人。
const originFn = window.getComputedStyle
Object.defineProperty(window, ‘getComputedStyle’, {
get(){
return (el: any) =>{
if(el instanceof HTMLImageElement && el.src.includes(‘…’)){
return {
…originFn(el),
display: ‘block’
}
}
return originFn(el)
}
}
})
哈哈哈哈哈哈哈哈,阮大佬这一手是有点严格了。