远程规则与高级配置
除了内置过滤规则与交互式隐藏页面元素工具外,Nvirya AdGuard v11.7.0 还支持从远程 URL 同步自定义域名拦截列表,以及导出/导入按站点保存的 CSS 过滤规则。这两项功能均位于关于标签页的备份与同步分组下。
1. 从远程 URL 同步(域名拦截列表)#
工作机制#
从远程 URL 同步(“从原始 host 列表导入拦截域名”)功能会从您指定的链接拉取纯文本(.txt)或 .json 格式的域名列表,提取有效主机名,并将其合并到您的自定义拦截域名集合(nvirya_x_custom_blocked)中。
加入 nvirya_x_custom_blocked 的每个域名都会通过两层机制生效:
- JavaScript 网络请求拦截:
isAdUrl(u)会调用isCustomBlockedHost(u.hostname)(通过hostMatches同时匹配主域名及其所有子域名),拦截匹配的fetch、XMLHttpRequest、navigator.sendBeacon、<script src>与<img src>请求。 - 修饰性 CSS 与 DOM 清理:
installCosmeticCSS()会为每个自定义拦截域名生成隐藏iframe[src*="<domain>"], img[src*="<domain>"], a[href*="//<domain>"]的样式规则,且syncRulesFromRawUrl()会立即扫描当前页面上最多 400 个<script>、<iframe>、<img>和<a>元素以移除或隐藏匹配节点。
支持的规则格式#
解析器(parseDomainsFromRawText 与 extractDomainCandidate)支持通过 http: 或 https: 获取的以下格式文本:
- 标准
hosts文件行:0.0.0.0 ads.example.com 127.0.0.1 tracker.example.net ::1 banner.example.org - Adblock 风格域名锚点规则:
||ads.example.com^ ||popups.example.net^$third-party - 纯域名列表(每行一个域名):
ads.example.com clicks.example.net - JSON 数组或对象:
[ "ads.example.com", { "domain": "tracker.example.net" }, { "hostname": "pop.example.org" } ]
解析器校验规则与忽略项#
为防止格式错误的规则或不兼容的过滤语法破坏正常网页,extractDomainCandidate() 实施了严格校验:
- 行数上限: 每次远程同步最多读取 15,000 行(
Math.min(lines.length, 15000))。 - 域名语法校验: 自动剥离协议前缀(
http://、https://)、通配符前缀(*.)以及路径/选项后缀(/、?、^、$、:、|),然后通过正则表达式RE_VALID_DOMAIN验证是否为合法域名。 - 自动忽略的行:
- 以
#、!、//或[开头的注释行与文件头(以及空白符后的行内注释)。 - 本地主机条目(
localhost、broadcasthost、local)以及当前页面自身的hostname。 - 修饰性选择器与 Scriptlet 规则: 凡是包含
##、#@#、#?#或#$#的行都会被完全跳过。从远程 URL 同步仅导入域名,不解析 uBlock/AdGuard 的 CSS 选择器或脚本片段。
- 以
如何配置及 24 小时自动刷新#
- 打开 Nvirya AdGuard 控制面板(
Alt+A)并切换到关于标签页。 - 在备份与同步下,点按从远程 URL 同步。
- 在弹出的输入框(
输入原始列表 URL (.txt 或 .json):)中粘贴指向原始文本或 JSON 域名列表的https://链接并确认。 - 脚本会通过
GM_xmlhttpRequest(10 秒超时)或fetch拉取该 URL(自动附加?_t=<timestamp>防缓存参数),将 URL 保存至nvirya_x_sync_url,在nvirya_x_sync_time中记录同步时间戳,并弹出提示:已同步 {count} 个新域名。 - 每 24 小时自动静默更新: 只要
nvirya_x_sync_url中保存了同步地址,阶段 3 后台初始化就会检查距离上次同步(nvirya_x_sync_time)是否已超过24 小时(SYNC_INTERVAL_MS = 86,400,000 ms)。若已超过 24 小时,脚本会在后台静默重新拉取并合并新增域名。
安全注意事项与误拦截恢复方法#
重要提示: 请仅从您完全信任的来源同步域名列表。
如果同步的域名列表误拦截了某个网站的正常资源:
- 放行单个域名: 打开 概览 → 快捷操作 → 连接日志,在
筛选域名...搜索框中查找该域名,然后点按右侧的允许(removeCustomBlockedHost)。 - 在当前网站临时停用: 在 概览 → 快捷操作 中点按本次会话暂停或允许此网站。
- 清空所有已同步域名: 在用户脚本管理器的存储编辑器中删除
nvirya_x_custom_blocked与nvirya_x_sync_url两个键。
2. 导出与导入站点过滤规则#
当您使用隐藏页面元素隐藏页面块时,Nvirya AdGuard 会按主机名将生成的 CSS 选择器保存在 nvirya_x_site_rules 中:
json
{
"example.com": [
{
"selector": "div.sticky-promo-banner",
"action": "hide",
"created": 1761034000000
}
]
}
- 导出过滤规则(
导出过滤规则): 前往 关于 → 备份与同步 → 导出过滤规则,将自定义规则格式化为 JSON 并复制到剪贴板(已复制 {count} 条规则到剪贴板),若剪贴板受限则回退至prompt()弹窗供手动复制。 - 导入过滤规则(
导入过滤规则): 前往 关于 → 备份与同步 → 导入过滤规则,粘贴 JSON 对象或 Base64 编码字符串。脚本会将不重复的选择器合并至nvirya_x_site_rules,立即更新<style data-nvirya-site-rules>并提示已导入 {count} 条新规则。 - 恢复误隐藏的规则: 打开 概览 → 快捷操作 → 本站过滤规则 点按红色
×删除单条规则,或前往 关于 → 存储与更新 → 清除本站规则 清空当前网站的所有自定义规则。