当前位置: 首页 > news >正文

广告屏蔽插件的内部细节EasyList 规则详解:为什么广告屏蔽不直接用 CSS/JS?​(彩蛋)

广告屏蔽插件的内部细节:EasyList 规则详解;为什么广告屏蔽不直接用 CSS/JS屏蔽广告?​

我们经常在浏览器中使用一些广告屏蔽插件(如 ​uBlock OriginAdGuardAdBlock Plus)已经成为许多用户的必备插件。

刚开始我以为这些工具用 css 属性或者 JavaScript 代码来直接清除这些广告。

知道我了解到这些工具的核心依赖于 ​EasyList​ 这样的过滤规则集,而不是简单的 CSS 或 JavaScript 隐藏广告。

那么,​为什么广告屏蔽工具要自定义一套规则语法,而不是直接用 CSS/JS 呢?​

EasyList官方地址

EasyList - 概述

GitHub - Quarklizi/Easylist-China: 中文区广告拦截规则

1. 什么是 EasyList?​

EasyList 是最流行的广告过滤规则集之一,由社区维护,主要用于 ​uBlock OriginAdBlock Plus​ 等广告拦截工具。它的核心功能是:

  • 精准匹配广告元素​(如横幅、弹窗)
  • 拦截广告网络请求​(阻止广告资源加载)
  • 绕过反广告屏蔽检测​(防止网站强制显示广告)

EasyList 规则示例

bilibili.com##.ad-banner       // 隐藏B站的广告横幅
youtube.com##.ytd-popup       // 隐藏YouTube弹窗
||ads.example.com^$script      // 拦截 ads.example.com 的广告脚本

为什么不用 CSS/JS 屏蔽广告?​

虽然 CSS 和 JavaScript 也能隐藏广告,但它们存在以下关键问题:

​(1) 性能问题:CSS/JS 影响页面加载

  • CSS 隐藏广告​(如 display: none)仍然会下载广告资源,浪费带宽。

  • JS 移除广告​(如 document.querySelector('.ad').remove())会阻塞主线程,导致页面卡顿。

  • EasyList 方案​:
    直接在网络请求层面拦截广告(如 ||ads.com^),广告根本不会加载,节省流量和 CPU。

​(2) 无法阻止广告跟踪和恶意脚本

  • CSS/JS 只能隐藏可见元素,但广告可能已经执行了跟踪脚本(如 Google Analytics)。

  • 某些广告会动态生成,CSS/JS 难以精准匹配。

  • EasyList 方案​:
    支持 ​正则表达式​(如 /tracking_\d+.js/)和 ​HTTP 头过滤,彻底阻止广告相关请求。

​(3) 容易被广告商检测并绕过

许多网站(如 YouTube、知乎)会检测 display: none 或 remove(),然后强制显示「请关闭广告屏蔽器」的弹窗。

  • EasyList 方案​:

  • 规则在浏览器底层生效,更难被检测。

  • 支持 ​反反广告屏蔽规则​(如 ##^script:has-text(ad))。

​(4) 维护成本高

  • CSS/JS 需要手动更新,广告商稍微改个 class 名就会失效。

  • EasyList 由全球社区维护,每天自动更新规则。

  • EasyList 方案​:
    规则库自动同步,用户无需手动调整。


简单介绍一下EasyList 核心语法解析

​(1) 基本隐藏规则

域名##CSS选择器

示例:

bilibili.com##.ad-container  // 隐藏B站的广告容器

​(2) 拦截网络请求

||ads.com^$script
  • || 匹配所有子域名(如 ads.example.comtrack.ads.com)。
  • $script 指定拦截脚本(还支持 $image$stylesheet)。

​(3) 正则表达式匹配

/ads_\d+.js/

匹配动态生成的广告脚本(如 ads_123.jsads_456.js)。

​(4) 例外规则(白名单)​

@@||example.com^$document

允许 example.com 完全不过滤。


对比:CSS/JS vs. EasyList

对比项CSS/JS 方案EasyList 规则
性能影响渲染性能底层拦截,零开销
拦截能力只能隐藏已加载元素能阻止请求、修改 HTTP 头
反检测容易被发现隐蔽性强
维护成本需手动更新自动同步最新规则
适用场景简单隐藏元素专业级广告拦截

结论:为什么 EasyList 更强大?​

  1. 更快​:直接拦截广告请求,不浪费带宽。
  2. 更彻底​:阻止广告脚本、跟踪器,而不仅仅是隐藏。
  3. 更隐蔽​:绕过广告商的反屏蔽检测。
  4. 更智能​:支持通配符、正则表达式等高级匹配。

如果你只是偶尔隐藏广告,可以用 ​Stylus(CSS)​​ 或 ​Tampermonkey(JS)​
但如果你想要真正高效的广告拦截,​uBlock Origin + EasyList​ 才是最佳选择!

结尾

彩蛋:教你屏蔽B站搜索框灰字且不影响搜索_哔哩哔哩_bilibili

bilibili.com##input.nav-search-content::placeholder

bilibili.com##input.nav-search-input::placeholder`

相关文章:

  • Flink + Kafka 数据血缘追踪与审计机制实战
  • 开发搭载阿里云平台的物联网APP(支持数据接收与发送)
  • 日常开发中,iOS 性能调优我们怎么做?
  • SQL Server To Paimon Demo by Flink standalone cluster mode
  • 多线服务器具有什么优势
  • 【Science Advances】普林斯顿大学利用非相干光打造可重构纳米光子神经网络
  • Easy云盘总结篇-文件分享
  • vue3的新特性
  • Frida使用java.lang.reflect.Array类打印Java反射数组
  • Mkdocs页面如何嵌入PDF
  • 【Prometheus】业务指标与基础指标的标签来源差异及设计解析(扩展版)
  • 【Prometheus】深入解析 Prometheus 特殊标签 `__param_<name>`:动态抓取参数的艺术
  • var、let、const的区别
  • WPF MVVM入门系列教程(六、ViewModel案例演示)
  • 华为设备链路聚合实验:网络工程实战指南
  • Notepad++中XML格式化插件介绍
  • GPT与LLaMA:两大语言模型架构的深度解析与对比
  • console-chat-gpt开源程序是用于 AI Chat API 的 Python CLI
  • Android学习总结之Binder篇
  • Linux 下MySql主从数据库的环境搭建
  • 阚吉林任重庆市民政局党组书记,原任市委组织部主持日常工作的副部长
  • 代理销售保险存在误导行为,农业银行重庆市分行相关负责人被罚款0.1万元
  • 公募基金改革八大要点:建立浮动管理费收取机制、降低规模排名考核权重
  • 马上评|持续对标国际一流,才有22项“全球最优”
  • 中俄领导人将讨论从俄罗斯经蒙古至中国天然气管道项目?外交部回应
  • 巴基斯坦外交部:印度侵略行径侵犯巴主权