跳到主要内容

安全模式

安全模式是视觉层的恢复机制:它禁用第三方主题和插件, 让界面总是回到可工作的状态。

安全模式做什么

安全模式通过 URL 中的 ?safe=1 激活。它在任何软件包代码加载之前被处理:

  • 第三方主题 CSS 和令牌覆盖不会被添加到文档中。
  • 第三方插件入口点永远不会运行,包括旧版入口点。
  • 内置主题和内置插件运行时保持活动。

界面回退到始终存在的内置浅色和深色令牌。离开安全模式会恢复之前保存的 活动主题和插件状态 —— 退出不会改变你的选择。

为什么损坏的主题无法阻止恢复

几个保证保护用户免受损坏主题的影响:

  • 应用前预览 —— 主题在激活前被预览,安装软件包绝不会自动激活它。
  • 安全模式在软件包之前 —— ?safe=1 在查询主题注册表之前被处理, 因此即使 CSS 使渲染器崩溃的主题也永远不会被加载。
  • 重置按钮 —— 重置操作返回内置主题、移除运行时 CSS 链接并清除内联的 --st-* 覆盖。删除活动主题也会重置保存的主题选择。
  • 主题无法隐藏设置 —— 导航栏总是保持"设置"项可访问, 因为省略的系统项目会按标准顺序被恢复。在安全模式下使用内置的导航栏 顺序,菜单切换保持可用。
  • 没有代码执行 —— 主题完全不包含 JavaScript。它们是 CSS、令牌和 声明式布局,因此在安全模式生效之前没有可以运行的主题代码。

主题软件包限制

主题软件包永远不会获得对聊天记录、API 密钥或文件系统的访问权。其样式表 在被接受之前会对照禁止构造(@import、远程 URL、javascript: URL、 expression()!important 等)进行校验,其令牌必须是安全的 CSS 值。 主题 SDK 中没有可执行入口点。

插件的安全模式

同一个开关禁用第三方插件。插件沙箱、进程隔离和宿主强制的清理是运行时层; 安全模式是防止不受信任代码首先加载的双保险开关。插件侧的细节请参阅 插件沙箱化

以编程方式检查安全模式

@neotavern/theme-sdk 包导出 getSafeModeFromSearch(search), 它解析 URL 搜索字符串并返回 ?safe=1 是否存在。宿主把它用作加载软件包 CSS 和令牌覆盖之前的唯一闸门,同一个函数也适用于其他宿主。

安全模式下仍然可用的外壳区域请参阅外壳契约