▶_MiniApp Toolkit

mp-html

T2UI 库

小程序富文本组件,支持渲染和编辑 html,支持在微信、QQ、百度、支付宝、头条和 uni-app 平台使用。轻量化(≈25KB,9KB gzipped),功能丰富,支持表格、视频、SVG、代码高亮、LaTeX 公式等。

富文本html渲染跨平台uni-app编辑器

特性

  • 支持丰富标签(table/video/svg 等)
  • 图片自动预览、链接处理
  • 占位图(加载中/出错/预览)
  • 锚点跳转、长按复制
  • 大部分 html 实体
  • 插件扩展(搜索/编辑/代码高亮/LaTeX)
  • 流式输出(适配 AI 打字效果)

详细文档

mp-html#

资源概述#

mp-html 是一款功能强大的 小程序富文本组件,由 jin-yufeng 个人维护(GitHub 3731 stars / 527 forks,MIT 协议)。它解决了小程序原生 rich-text 组件功能不足的问题,支持在微信、QQ、百度、支付宝、头条和 uni-app 等多个平台使用。

核心优势:

  • 跨平台:一套代码,多平台运行(微信/QQ/百度/支付宝/头条/uni-app)
  • 功能丰富:支持 table、video、svg 等复杂标签,官方 rich-text 不支持的内容可渲染
  • 轻量化:≈25KB(9KB gzipped),对包体影响极小
  • 插件生态:支持代码高亮、LaTeX 公式、搜索关键词、富文本编辑、emoji 等扩展插件
  • 流式输出:支持 AI 场景的打字机效果(差量更新,无闪烁)

适用场景:

  • 小程序中渲染后端返回的 HTML 内容(CMS、博客、商品详情)
  • AI 对话场景的 Markdown→HTML 渲染(支持流式输出)
  • 需要表格、代码块、公式等复杂排版的场景

设计规范#

组件属性#

属性类型默认值说明
contentString用于渲染的 html 字符串
container-styleString容器样式
copy-linkBooleantrue是否允许外部链接点击时自动复制
domainString主域名(用于链接拼接)
error-imgString图片出错时的占位图
lazy-loadBooleanfalse图片懒加载
loading-imgString图片加载中占位图
pause-videoBooleantrue播放视频时自动暂停其他
preview-imgBooleantrue图片点击自动预览
scroll-tableBooleanfalse表格添加滚动层
selectableBooleanfalse文本长按复制
tag-styleObject标签默认样式
use-anchorBooleanfalse锚点链接

组件事件#

事件触发时机
loadDOM 树加载完毕
ready图片加载完毕
error渲染错误
imgtap图片被点击
linktap链接被点击
play音视频播放(v2.3.0+)
pause音视频暂停(v2.5.2+)
fullscreenchange视频全屏变化(v2.5.2+)

插件体系#

插件作用
audio音乐播放器
editable富文本编辑
emoji解析 emoji
highlight代码块高亮
markdown渲染 Markdown
search关键词搜索高亮
style匹配 style 标签样式
txv-video腾讯视频
img-cache图片缓存
latexLaTeX 公式渲染
card卡片展示

审核规范#

mp-html 是开源 UI 组件,无需平台审核。但需注意:

  • 富文本内容来源:若从后端动态获取 HTML,需确保内容不含违规链接/脚本
  • 图片安全:组件默认开启图片预览,若图片含敏感内容需关闭 preview-img
  • 链接处理:默认 copy-link=true 会复制外部链接,部分小程序审核不允许引导跳转,需设为 false

开发指南#

快速上手(微信小程序 npm 方式)#

code
# 1. 安装
npm install mp-html
code
// 2. 页面 json 中引入
{
  "usingComponents": {
    "mp-html": "mp-html"
  }
}
code
<!-- 3. 页面 wxml -->
<mp-html content="{{html}}" />
code
// 4. 页面 js
Page({
  onLoad() {
    this.setData({
      html: '<div>Hello World!</div><p>支持 <b>富文本</b> 渲染</p>'
    })
  }
})

uni-app 使用#

code
<template>
  <view>
    <mp-html :content="html" />
  </view>
</template>
<script>
import mpHtml from 'mp-html/dist/uni-app/components/mp-html/mp-html'
export default {
  components: { mpHtml },
  data() {
    return { html: '<div>Hello uni-app!</div>' }
  }
}
</script>

AI 流式输出场景(v2.5.2+)#

code
// 支持 setContent 方法实现差量更新,避免闪烁
this.selectComponent('#mp-html').setContent(chunk)

常见陷阱#

  1. npm 构建问题:微信小程序使用 npm 需在开发者工具中「构建 npm」
  2. rich-text 不兼容:mp-html 是独立组件,不能直接替换 rich-text 标签
  3. nvue 中使用需额外拷贝:uni-app nvue 模式需将 dist/uni-app/static 拷贝到项目 static 目录
  4. cli 方式引入需配置:uni-app cli 项目需在 vue.config.js 中配置 transpileDependencies
  5. 包体影响小:≈25KB(9KB gzipped),对小程序包体限制几乎无影响

生态资源#

官方资源#

相关项目#

项目说明
mp-html-demo官方示例项目
rich-text(原生)小程序内置富文本组件(功能有限)
towxml另一种 Markdown/HTML 渲染方案(更重)

版本更新#

版本历史#

  • v2.5.2(2025-12-14):新增音视频 pause/fullscreenchange 事件;优化流式输出差量更新
  • v2.5.1(2025-04-20):Bug 修复与性能优化
  • v2.5.0(2024-04-22):大版本更新,新增多项功能
  • v2.4.0:新增 setPlaybackRate API
  • v2.3.0:新增 play 事件

维护状态#

  • 活跃维护,最近 push 2026-04-19
  • MIT 协议,可免费商用
  • npm 最新版 v2.5.2