关于阮一峰博客的反广告屏蔽脚本的绕过

/ 2评 / 1

首先,没错,我承认这种事情很不道德,毕竟别人写一些优质博文,挂一些广告也是理所应当的——毕竟你也没花钱订阅这个博客,白嫖反倒还有理了?

但是问题是,你想让我关掉广告插件本身是没问题的,有问题的在你的做法。其他网站一般会出一个 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 也可以。


当然我还是添加了广告屏蔽例外的 = = 请不要质疑我的为人。

  1. 1说道:

    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)
    }
    }
    })

  2. wa007说道:

    哈哈哈哈哈哈哈哈,阮大佬这一手是有点严格了。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Your comments will be submitted to a human moderator and will only be shown publicly after approval. The moderator reserves the full right to not approve any comment without reason. Please be civil.