feat: render rich formulas and signed question media

This commit is contained in:
Codex
2026-06-30 00:42:52 +08:00
parent 4a13715f29
commit db86fa3705
10 changed files with 243 additions and 29 deletions

View File

@@ -404,6 +404,11 @@ apps/taro/src/components/RichContent.tsx
apps/taro/src/components/rich-content.css
```
官方参考:
- KaTeX options`https://katex.org/docs/options`
- Taro RichText`https://docs.taro.zone/en/docs/components/base/rich-text`
当前接入页面:
```text
@@ -415,18 +420,18 @@ pages/student/handbook/index 知识点摘要和正文
第一版支持:
- 纯文本和换行。
- Markdown 图片 `![alt](https://...)`站内 `/...` 路径。
- Markdown 图片 `![alt](https://...)`站内 `/...` 路径,或私有资源引用 `asset:<uuid>``content_asset:<uuid>``/asset/<uuid>`
- 基础表格。
- `**加粗**`、行内代码和代码块。
- `$...$``$$...$$``\(...\)``\[...\]` 公式占位样式
- H5 端用 KaTeX 渲染 `$...$``$$...$$``\(...\)``\[...\]`;渲染失败时降级显示公式原文
- 长题干、长单词、长公式自动换行或横向滚动。
安全边界:
- 组件会剥离 `<script>``<style>` 和普通 HTML 标签,不执行后端或导入内容中的 HTML/JS。
- 图片只允许 HTTPS、站内相对路径、本地开发 localhost HTTP拒绝 `javascript:``data:`、协议相对 URL 等危险来源。
- 私有题图、资料图、PDF 和视频仍必须走后端资源台账和签名接口;不要把私有 OSS/COS/Supabase Storage URL 直接塞进题干长期渲染
- 当前公式只是安全可读的占位样式,不等于完整 KaTeX/MathJax。后续小程序端要在同一组件内替换为跨端公式渲染或服务端公式图片方案
- 图片只允许 HTTPS、站内相对路径、本地开发 localhost HTTP,或明确的 `content_assets` 资源 ID 引用;拒绝 `javascript:``data:`、协议相对 URL 等危险来源。
- 私有题图通过 `GET /api/catalog/assets/preview?assetId=...` 申请短期签名后展示,不把私有 OSS/COS/Supabase Storage URL 长期写进题干或本地缓存
- 公式 HTML 只来自 KaTeX `renderToString`,不要把题库导入的原始 HTML 直接交给 `RichText`。小程序端还要真机验收 KaTeX 生成 HTML 的兼容性;如兼容性不足,保持同一 parser替换为服务端公式图片或小程序专用公式组件
### 断点续练