远程规则与高级配置

除了内置过滤规则与交互式隐藏页面元素工具外,Nvirya AdGuard v11.7.0 还支持从远程 URL 同步自定义域名拦截列表,以及导出/导入按站点保存的 CSS 过滤规则。这两项功能均位于关于标签页的备份与同步分组下。

1. 从远程 URL 同步(域名拦截列表)#

工作机制#

从远程 URL 同步(“从原始 host 列表导入拦截域名”)功能会从您指定的链接拉取纯文本(.txt)或 .json 格式的域名列表,提取有效主机名,并将其合并到您的自定义拦截域名集合(nvirya_x_custom_blocked)中。

加入 nvirya_x_custom_blocked 的每个域名都会通过两层机制生效:

  1. JavaScript 网络请求拦截: isAdUrl(u) 会调用 isCustomBlockedHost(u.hostname)(通过 hostMatches 同时匹配主域名及其所有子域名),拦截匹配的 fetch、XMLHttpRequest、navigator.sendBeacon、<script src> 与 <img src> 请求。
  2. 修饰性 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 小时自动刷新#

  1. 打开 Nvirya AdGuard 控制面板(Alt+A)并切换到关于标签页。
  2. 在备份与同步下,点按从远程 URL 同步。
  3. 在弹出的输入框(输入原始列表 URL (.txt 或 .json):)中粘贴指向原始文本或 JSON 域名列表的 https:// 链接并确认。
  4. 脚本会通过 GM_xmlhttpRequest(10 秒超时)或 fetch 拉取该 URL(自动附加 ?_t=<timestamp> 防缓存参数),将 URL 保存至 nvirya_x_sync_url,在 nvirya_x_sync_time 中记录同步时间戳,并弹出提示:已同步 {count} 个新域名。
  5. 每 24 小时自动静默更新: 只要 nvirya_x_sync_url 中保存了同步地址,阶段 3 后台初始化就会检查距离上次同步(nvirya_x_sync_time)是否已超过 24 小时(SYNC_INTERVAL_MS = 86,400,000 ms)。若已超过 24 小时,脚本会在后台静默重新拉取并合并新增域名。

安全注意事项与误拦截恢复方法#

重要提示: 请仅从您完全信任的来源同步域名列表。

如果同步的域名列表误拦截了某个网站的正常资源:

  1. 放行单个域名: 打开 概览 → 快捷操作 → 连接日志,在 筛选域名... 搜索框中查找该域名,然后点按右侧的允许(removeCustomBlockedHost)。
  2. 在当前网站临时停用: 在 概览 → 快捷操作 中点按本次会话暂停或允许此网站。
  3. 清空所有已同步域名: 在用户脚本管理器的存储编辑器中删除 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} 条新规则。
  • 恢复误隐藏的规则: 打开 概览 → 快捷操作 → 本站过滤规则 点按红色 × 删除单条规则,或前往 关于 → 存储与更新 → 清除本站规则 清空当前网站的所有自定义规则。