外部链接防护 - 退出确认与信任门控

:information_source: 摘要 此主题组件为已渲染帖子中的外部链接添加了可配置的保护机制。它应用基于信任级别的规则、可选的登录和信息重定向、受信任域的视觉指示器以及可自定义的退出确认模态框。
:eyeglasses: 预览 Theme Creator
:hammer_and_wrench: 代码仓库 \u003chttps://github.com/VaperinaDEV/external-link-shield\u003e
:question: 安装指南 如何安装主题或主题组件
:open_book: Discourse 主题新手? Discourse 主题使用入门指南

安装此主题组件

您好 :waving_hand:

我想分享一个主题组件,它为已渲染帖子中的外部链接提供了细粒度的控制,结合了:

  • 基于信任级别的访问控制
  • 匿名用户保护
  • 自定义退出确认模态框
  • 受信任与未知域的视觉指示器

该组件专为那些外部链接可能涉及法律、安全或信任影响的社区设计。


:sparkles: 特性

:gear: 可配置的信任级别规则

所有基于信任级别的行为都可通过主题设置完全配置

您可以独立启用或禁用:

  • 匿名用户屏蔽
  • TL0 信息替换
  • TL1 手动显示要求
  • 针对更高信任级别的退出确认模态框

这使得该组件能够适应截然不同的社区策略,从严格的链接屏蔽到最小的用户摩擦。

:locked_with_key: 信任级别感知的外部链接

外部链接的行为根据查看者的信任级别而有所不同:

  • 匿名用户
    • 外部链接将被替换为登录链接或设置中定义的自定义 URL。
  • TL0
    • 链接将被替换为可配置的重定向,例如解释信任级别的帖子或设置中定义的任何其他 URL。
  • TL1
    • 链接需要手动显示(点击查看),然后点击链接会显示退出确认模态框。
  • TL2+
    • 链接表现正常,但始终显示退出确认模态框

:door: 退出确认模态框

在离开论坛之前,用户会看到一个模态框,该模态框:

  • 明确告知他们正在离开社区
  • \u003ccode\u003e 标签中显示完整的目标 URL
  • 尊重用户的 external_links_in_new_tab 偏好设置

这对于以下情况特别有用:

  • 合规性要求高的社区
  • 网络钓鱼缓解
  • 教育经验不足的用户


:magnifying_glass_tilted_left: 基于域的行为(通过设置)

该组件引入了两个主题设置:

internal_domains:
  type: list
  default: ""
  description: "您的论坛和 CDN 域名(例如 example.com|example-cdn.com)。这些将没有图标和模态框。"

excluded_domains:
  type: list
  default: ""
  description: "受信任的外部域名(例如 youtube.com|google.com)。这些将显示一个 LOCK 图标,但会跳过模态框/屏蔽。"
  • 内部域名
    • 被视为内部域名 → 没有图标,没有模态框
  • 排除(受信任)域名
    • 显示 :locked: 锁形图标
    • 跳过信任级别限制和模态框
  • 所有其他外部链接
    • 显示一个外部链接图标
    • 根据信任级别进行限制和/或确认

:artist_palette: 视觉指示器 (SCSS)

图标纯粹通过 CSS 添加:

  • 外部未知链接 → external-link 图标
  • 受信任的外部链接 → 锁形图标(成功颜色)

这使 DOM 保持整洁,并避免了基于 JS 的图标注入。

此截图显示了该组件如何区分:

  • 排除的域名:受信任的外部链接(锁形图标,无退出确认),
  • 内部域名:内部链接(无图标,无退出确认),
  • 未知外部链接(带有退出确认的 external-link 图标)。

:pushpin: 用例

如果您想实现以下目标,此组件非常有用:

  • 保护用户免受不安全或误导性的外部链接的侵害
  • 在允许新用户离开论坛之前对其进行教育
  • 强制执行社区信任进阶
  • 在不破坏用户体验 (UX) 的情况下添加法律/合规性免责声明
5 个赞

超棒的主题组件!!!

我们实际上构建了一个类似的东西,其中我们也隐藏了点击次数徽章,并用已验证/危险徽章替换它们。

我们主要将其用于我们有联盟合作伙伴关系的已验证/受信任的供应商和商家。

此外,我们的弹出窗口还显示通过主题组件的对象设置编辑器管理的优惠券代码。

1 个赞