Skip to content
On this page

Markdown 强大的 Markdown 渲染

s-markdown 用于安全渲染 CommonMark/GFM 或完整 HTML 片段,并扩展代码高亮、任务列表、脚注、数学公式、Mermaid、目录锚点、代码复制、图片预览和图片下载能力。

Hidden Title

基础用法:<s-markdown :source="source" />

属性事件插槽简介

基础用法(默认 allowHtml=truesanitize=truelinkify=truehighlight=truemermaid=truemath=true

chenghua示例

完整语法

图片预览(默认 imagePreview=true

点击 Markdown 图片后会打开全视口预览,支持放大、缩小、旋转、上一张、下一张、下载和关闭,也可以聚焦图片后按 Enter 或空格键打开。imagePreview 的可选值是 truefalse,默认值是 true;设置为 false 可关闭点击预览。地址为空的图片不会生成破图元素,只显示图片的替代文字;加载失败或无法解码的图片会保留正文替代文字,但不会进入预览列表,上一张和下一张只会切换加载成功的图片。远程图片下载受浏览器同源策略限制,图片服务器未开放 CORS 时会回退为直接打开原图地址。

石景山项目部分代码示例

纯 HTML(默认 contentType='markdown'

接口直接返回完整 HTML 片段时,使用 content-type="html" 跳过 Markdown 语法解析,避免 HTML 中的空行和缩进被识别为代码块。HTML 仍会经过默认开启的 DOMPurify 安全过滤。contentType 可选值为 markdown / html,默认值为 markdown

API

属性名说明类型 / 可选值默认值
sourceMarkdown 或 HTML 源文本string''
contentType源文本解析模式,HTML 模式跳过 Markdownmarkdown / htmlmarkdown
allowHtml是否解析源文本中的原始 HTMLtrue / falsetrue
sanitize是否使用 DOMPurify 过滤输出true / falsetrue
breaks是否把普通换行转换为 <br>true / falsefalse
linkify是否自动识别 URLtrue / falsetrue
typographer是否启用排版替换true / falsetrue
highlight是否使用 Prism 高亮常用语言true / falsetrue
copyCode是否显示代码复制按钮true / falsetrue
mermaid是否渲染 mermaid 代码块true / falsetrue
math是否通过 KaTeX 渲染 $...$$$...$$true / falsetrue
headingAnchors是否为标题生成稳定 IDtrue / falsetrue
externalLinks是否让 HTTP(S) 链接在新窗口安全打开true / falsetrue
baseUrl相对链接和图片的解析基准地址string''
imageLazy是否为图片启用懒加载和异步解码true / falsetrue
imagePreview是否允许点击图片打开全视口操作预览true / falsetrue
emptyText无内容时显示的文字string''

事件

事件名说明参数
renderedMarkdown 与异步增强完成后触发{ html, headings }
error解析、Mermaid 或复制失败时触发unknown
copy代码复制成功后触发code: string
link-click点击渲染结果中的链接时触发{ event, href }

暴露方法与状态

名称说明
render()主动重新渲染当前内容
renderedHtml当前生成并过滤后的 HTML
headings标题目录数组,包含 leveltextslug
state包含最终 htmlheadings 的只读状态

安全说明

  • 默认 allowHtml=true,会解析 Markdown 中的原始 HTML。
  • 完整 HTML 片段应设置 contentType='html',跳过 Markdown 解析;sanitize 仍然生效。
  • 如果内容来源不完全可信,建议继续保留默认的 sanitize=true
  • 服务端渲染且 sanitize=true 时,原始 HTML 会先按普通文字安全输出,自定义 HTML 属性暂不生效;客户端挂载后再通过 DOMPurify 过滤并渲染,避免未过滤内容进入服务端页面。
  • 仅在内容完全可信且业务确实需要脚本级 HTML 能力时关闭 sanitize
  • Mermaid 使用严格安全级别,外部链接自动增加 noopener noreferrer

思云博智私有前端组件库