安全模式
安全模式是视觉层的恢复机制:它禁用第三方主题和插件, 让界面总是回到可工作的状态。
安全模式做什么
安全模式通过 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 和令牌覆盖之前的唯一闸门,同一个函数也适用于其他宿主。
安全模式下仍然可用的外壳区域请参阅外壳契约。