← 返回博客列表

Markdown 在线怎么写?实时预览与 XSS 安全说明

自写 Markdown 解析器渲染 React 元素,链接 URL 白名单防 javascript:,TwoThink 在线编辑器不上传内容。

写 README、接口说明或博客草稿时,左侧 Markdown、右侧即时预览几乎是标配。难点在于:预览必须安全——恶意 [click](javascript:alert(1)) 不能变成可点击链接。

MVP 支持语法

TwoThink Markdown 编辑器 当前支持:

  • 标题 # ~ ######
  • 粗体、斜体、行内 `code`
  • 围栏代码块 ```lang
  • 无序 - / 有序 1.
  • 链接 [text](url)、图片 ![alt](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 依赖,两者互不影响。