docs/archives/119-csp-safe-template-processing/README.md
问题: 浏览器扩展环境中的严格内容安全策略(CSP)导致Handlebars模板编译失败,出现"unsafe-eval"错误。
解决方案: 实现CSP兼容的模板处理器,在浏览器扩展环境中使用简单变量替换,其他环境保持完整Handlebars功能。
影响范围:
OptimizationError: Optimization failed: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self'".
Handlebars.compile()内部使用Function构造函数或eval()packages/core/src/services/template/processor.ts:89packages/extension/public/manifest.json创建CSPSafeTemplateProcessor类,提供基本变量替换功能:
支持功能:
{{variableName}} - 基本变量替换{{ variableName }} - 带空格变量{{originalPrompt}}、{{lastOptimizedPrompt}}、{{iterateInput}}不支持功能:
{{#if condition}} - 条件语句{{#each items}} - 循环语句{{> partial}} - 部分模板增强isExtensionEnvironment()函数,准确区分不同运行环境:
检测逻辑:
环境支持:
TemplateProcessor根据环境自动选择合适的处理器,无需手动配置。
packages/core/src/services/template/
├── processor.ts # 主模板处理器(已修改)
├── csp-safe-processor.ts # CSP安全处理器(新增)
└── minimal.ts # Handlebars导出
packages/core/tests/unit/template/
├── csp-safe-processor.test.ts # CSP处理器测试(新增)
└── extension-environment.test.ts # 扩展环境测试(新增)
packages/core/docs/
└── csp-safe-template-processing.md # 技术文档(新增)
packages/core/docs/csp-safe-template-processing.md背景: 为了进一步简化架构并提供统一的CSP安全保障,我们完成了从Handlebars到Mustache的全面迁移。
主要变更:
{{#variable}}...{{/variable}}技术优势:
文件变更:
- packages/core/src/services/template/csp-safe-processor.ts (已删除)
- packages/core/tests/unit/template/csp-safe-processor.test.ts (已删除)
+ 所有模板处理统一使用 Mustache.render()
+ 依赖从 handlebars 更新为 mustache
文档更新:
这次迁移是本CSP安全处理方案的自然演进,从"环境特定的兼容方案"升级为"统一的原生支持方案"。
🏷️ 标签: CSP安全, 模板处理, 浏览器扩展, 环境检测, 兼容性, Mustache迁移