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

广告屏蔽插件的内部细节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`

http://www.xdnf.cn/news/4440.html

相关文章:

  • MATLAB在数学问题求解中的多元应用探究
  • BeanFactoryPostProcessor 与 BeanPostProcessor 的区别
  • 【Qt】Qt 构建系统详解:qmake 入门到项目实战
  • 鸿蒙开发——2.ArkTS声明式开发(页面和自定义组件)
  • HTTP请求与缓存、页面渲染全流程
  • 【Java ee 初阶】多线程(8)
  • Redis再次开源!reids8.0.0一键安装脚本分享
  • CentOS算法部署
  • ROS2: 服务通信
  • 机器学习实操 第二部分 神经网路和深度学习 第14章 使用卷积神经网络进行深度计算机视觉
  • 精益数据分析(48/126):UGC商业模式的指标剖析与运营策略
  • 8. HTML 表单基础
  • PostgreSQL给新用户授权select角色
  • 【C++】类和对象(下)
  • day009-用户管理专题
  • 304.不同的二叉搜索树
  • mysql:什么是一致性视图(Read View)
  • AI应用开发实战分享
  • C++模板
  • Python引领前后端创新变革,重塑数字世界架构
  • ✍️【TS类型体操进阶】挑战类型极限,成为类型魔法师![特殊字符]♂️✨
  • iTwin 数据报表(只是简单的原型不代表实现)
  • python 使用 mongodb 的一些方法
  • Spring Boot 中如何解决 CORS 问题(详解)
  • 【Java ee 初阶】多线程(9)上
  • Redis从入门到实战 - 高级篇(上)
  • day 14 SHAP可视化
  • Android学习总结之Binder篇
  • 空间数据分析新趋势:AI 与 ArcGIS Pro 的协同创新
  • 从零开始学习three.js(15):一文详解three.js中的纹理映射UV