草榴 - 处理广告相关问题 & 主动加载图片

去除广告,去除反广告屏蔽,去除部分发帖者加入的内容广告,主动从图片元素的属性中加载图片

نووسەر
Crystal-RainSlide
Daily installs
2
Total installs
2,381
Ratings
7 0 0
وەشان
1.1
Created
2020-04-06
Updated
2020-04-07
مۆڵەت
نییە
Applies to

本脚本暂时只针对 PC 版帖子。

草榴的新把戏

现在,草榴将图片链接置于图片元素的属性中,需要额外代码加载,而页面上已有的加载图片代码则含有反广告屏蔽器,会检测一批表达式的执行结果,表达式涉及到广告元素的方方面面,比如 CSS 和元素内容。本简介页面底部有列出脚本编写当时的所有检测表达式,如果其中有一个表达式的执行结果是 true,内容就没了。

对策

所以,最好还是不要继续玩 CSS 游戏了,虽然说,把一切已有的规则去掉、换成 .tips { position: absolute; top: -100px; },也可以撑一会,但是实在不是长久之计。哪怕把用临近的元素来遮挡这样的办法都算上,能用来让广告看不见的 CSS 最多就几百条,真要检测,是遍历得了大多数的。但是,如果把反广告屏蔽器整个给干掉,再自己搞定加载图片的事情,就稳妥多了。

JS 一路对线对下去,只要论坛不封闭掉,到最后,也不过只要要求大家用 uBlock Origin 阻止页面上的所有脚本,再由用户脚本来解析加载想看到的东西。

或者,草榴引入一些像话一点的广告,让大家不想再屏蔽屏蔽了:点击广告很讨厌;跳转广告也很讨厌;一直以来,横幅广告确实够小,不怎么造成视觉干扰,但是内容和前两个一样从来跳不出某个循环。一天到晚博彩博彩,点了一下,指不定之后的网络社交生涯就要在戒赌吧度过了。这样的广告,谁不想屏蔽呢?

发帖者的内容广告

很长时间以来,草榴论坛一些板块被狗推(博彩广告推手)把持,绝大部分帖子自带一些更加恼人广告。本脚本也会尝试移除,并将其输出至控制台。如果启用后大家找不到下载链接,可以按 F12 打开控制台看看。

这个脚本具体干了什么

在页面加载开始时,将广告的函数设死为移除广告元素,将反广告屏蔽器的函数设死为空函数。

在页面加载完毕之后,主动从图片元素的属性中加载图片与图片链接,代替页面上的加载图片代码,再去除链接跳转。

加载图片的同时,会检查图片地址和图片链接是否为广告,如果匹配,则删除图片。对帖子内容中的所有链接也作相同处理。

函数名

spinit
由页面内联脚本运行,在运行此函数的脚本所在的位置插入广告
r9aeadS
反广告屏蔽器函数

脚本编写当时的反广告屏蔽器检测表达式

$('.tips td').css('right') != '0px'
$('.sptable_do_not_remove:eq(0)').html().indexOf('serdta') == -1
parseInt($('.tips').css('width')) < 20
$('.tips').css('text-indent') != '0px'
$('.tips td').css('text-indent') != '0px'
typeof $('.sptable_do_not_remove:eq(0) td').attr('onclick') === 'undefined'
typeof spData[0]['c'] === 'undefined'

typeof $('.tips').css('top') === 'undefined'
typeof $('.sptable_do_not_remove').css('left') === 'undefined'

$('.tips').css('top').replace(/[^\d.]/g, '') != ''
$('.sptable_do_not_remove').css('left').replace(/[^\d.]/g, '') != ''
parseInt($('.tips').css('margin-left')) != 0
$('.sptable_do_not_remove').css('opacity') == '0'

typeof $('.tips').css('display') === 'undefined'
typeof $('.sptable_do_not_remove:eq(0)').html() === 'undefined'

$('.sptable_do_not_remove td').css('display') == 'none'
$('.tips').css('display') == 'none'
$('.tips').css('height') == '0px'
$('.tips').css('height') == '1px'
$('.tips').css('visibility') == 'hidden'