-
Notifications
You must be signed in to change notification settings - Fork 40
内联脚本标签过滤
返回静态过滤规则语法页面
受到浏览器 API 的限制,脚本标签过滤规则无法在所有浏览器都生效:
- 不支持 Chromium 类浏览器
- 给相关的 Chromium 问题 加星或有助于促使 Chromium 开发版本早日提供支持。
- 回退到统一屏蔽所有内联脚本标签或许有用。[1]
- 不支持 Firefox WebExtensions 版本 uBO 的场景包括:
- 使用 Firefox 56 及以下版本
- 使用 uBO version 1.14.23b2 及以下版本
[1] 通过使用 inline-script
静态过滤规则选项 (||example.com^$inline-script
),或者针对 内联脚本 使用动态过滤的 block 规则。
在 uBlock Origin 中有多种方法可以阻止脚本标签的执行:
- 屏蔽外部脚本资源:这些由网络过滤完成。
- 一次屏蔽页面中所有嵌入的脚本标签。[1]
内联脚本标签是嵌入主页面的 JavaScript 代码块:它们不能被阻止下载,除非整个页面被屏蔽,因此这种做法用处不大。下面这个示例显示的是带有两个内联脚本标签的网页 HTML 代码:
<html>
<head>
<meta name="referrer" content="origin">
<link rel="stylesheet" href="main.css" />
<script type="text/javascript">
function usefulCode() {
...
}
...
</script>
<title>lorem ipsum</title>
</head>
<body>
<h1>lorem ipsum</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
<script type="text/javascript">
function nuisanceCode() {
...
}
...
</script>
</body>
在本例中,统一屏蔽所有内联脚本标签并非好的解决方案,因为我们在屏蔽两个脚本标签的同时也失去了所需的 usefulCode
函数。
uBlock Origin 1.15.0 引入了 HTML 过滤,用于在浏览器从服务器解析 HTML 响应 之前 移除网页中特定的内联脚本标签:
example.com##^script:has-text(...)
在 has-text(...)
括号中的值可以是一个普通字符串或者字面上的 JavaScript 正则表达式 (/.../
)。
因此,我们可以使用脚本标签过滤精确禁用上例中的一个脚本标签(假设该页面的 URL 为 https://foo.example/bar.html
):
foo.example##^script:has-text(nuisanceCode)
这条规则的意思是:对任何来自 foo.example
网站的网页,禁用所有包含 nuisanceCode
字符串的内联脚本标签。
在网站与过滤工具的猫鼠游戏中,这个脚本标签过滤是受用户欢迎的新工具,它防止网站绕过过滤工具。
它的最大优点是可以 在源代码层面 对付部分网站使用的多种反屏蔽方法。
举例来说,http://focus.de/
在检测到用户使用过滤工具时会使用可笑的广告来劣化自己的网页,即使开启 EasyList + EasyList Germany 也无济于事,因为页面获取的图片是随机命名的,目的是阻止基于模板匹配的网络规则和修饰规则生效。
统一屏蔽所有内联脚本标签能够阻止网页自我劣化,但也可能禁用页面上其他有用的功能。不过,如果一条脚本标签规则能够屏蔽携带自我劣化的 JavaScript 代码的特定脚本标签,那它就变得更有针对性了:阻止不可取的内联 JavaScript 代码执行,同时保持可取的 JavaScript 代码不变。在写这段话时,下列脚本标签过滤规则对该网站仍然有效:
www.focus.de##^script:has-text(uabInject)
在这个具体的例子里,rp-online.de 的首页在检测到有过滤工具在用时会劣化自己的网页:
未开启内联脚本标签过滤时:
有合适的内联脚本标签规则生效时:
自带并默认开启的 uBlock filters 列表已经包含了一些能对付此类干扰的内联脚本标签规则。
uBlock Origin - 一款支持 Chromium、Firefox 和 Safari 的高效过滤工具,快速且简洁