Markdown 在线怎么写?实时预览与 XSS 安全说明
自写 Markdown 解析器渲染 React 元素,链接 URL 白名单防 javascript:,TwoThink 在线编辑器不上传内容。
写 README、接口说明或博客草稿时,左侧 Markdown、右侧即时预览几乎是标配。难点在于:预览必须安全——恶意 [click](javascript:alert(1)) 不能变成可点击链接。
MVP 支持语法
TwoThink Markdown 编辑器 当前支持:
- 标题
#~###### - 粗体、斜体、行内
`code` - 围栏代码块
```lang - 无序
-/ 有序1. - 链接
[text](url)、图片 - 引用
>、水平线---
GFM 表格(| a | b |)计划在 Phase 2,MVP 工具栏也不含表格按钮。
为什么用 React 元素而不是 innerHTML
工具页解析器不引 marked / DOMPurify:块级与行内语法解析为 AST,再 createElement 渲染。文本节点由 React 默认转义;链接与图片 URL 仅允许 http://、https://、mailto:,拒绝 javascript: 与 data:。
导出方式
- 复制 HTML:得到渲染后的 HTML 源码,可贴进 CMS 草稿
- 下载 .md:保存原始 Markdown 文件
底部实时显示字符数、词数、行数。
内容会上传吗?
不会。解析与预览都在你的浏览器标签页内完成,适合写含内部链接或草稿文案的文档。
和博客基建的区别
站内博客文章仍使用 react-markdown 渲染内容页;工具页单独自写解析器,保持 0 业务 npm 依赖,两者互不影响。