微信小程序 mp-html:专为小程序设计的富文本渲染组件

一、为什么选择 mp-html?

相比原生 rich-text 和其他富文本组件,mp-html 有三大核心优势:

  1. 兼容性极强:支持 HTML 标准标签(div、img、table、ul 等)和内联样式,能完美解析后端返回的复杂富文本数据,解决 rich-text 不支持的 video、audio 等标签问题。
  2. 功能全面:自带图片预览、链接跳转、长按复制、代码高亮等实用功能,无需额外开发。
  3. 灵活可控:支持通过配置禁用危险标签(如 script)、自定义样式隔离、动态更新内容,适配不同业务场景。

二、mp-html 快速上手:安装与配置

  1. 进入你的项目根目录

  2. Window+R→输入cmd→cd 你的项目根目录→在终端中执行初始化命令

    bash 复制代码
    npm init -y
  3. 通过 npm 安装 mp-html 组件
    在终端中继续执行安装命令(项目根目录下):

    bash 复制代码
    npm install mp-html --save
  4. 构建 npm(关键!小程序识别 npm 组件的必要步骤)

  • 微信开发者工具中 → 点击顶部「工具」→「构建 npm」;
  • 等待构建完成,构建成功后会在项目根目录生成 miniprogram_npm 文件夹,且其中包含 mp-html 组件(这是小程序实际使用的组件目录)。
  1. 组件引用路径(关键!避免路径错误)

    在要使用的页面json中配置组件路径:

    bash 复制代码
    "usingComponents": {"mp-html":"/miniprogram_npm/mp-html"}
  2. 在wxml中使用

    组件中就可以正常使用 mp-html 渲染富文本了,示例用法:

    bash 复制代码
    <mp-html content="{{html}}" />

三、核心用法:从基础渲染到高级配置

  1. 替换原生 rich-text

    xml 复制代码
    mp-html 的 content 属性仅支持完整 HTML 字符串,不支持模板内直接插值,需在 JS 中提前拼接
    <!-- content 属性接收拼接后的 HTML 字符串 -->
    <mp-html content="{{mpHtmlContent}}" />
    bash 复制代码
    // 组件内示例(Page 页面用法类似,在 onLoad 中调用)
    Component({
      properties: {
        questionItem: {
          type: Object,
          value: {},
          // 监听数据变化,动态更新 HTML
          observer: function(newVal) {
            this.updateMpHtmlContent(newVal);
          }
        }
      },
      data: {
        mpHtmlContent: "" // 存储拼接后的 HTML
      },
      methods: {
        updateMpHtmlContent(questionItem) {
          const { indexNum, questionContent } = questionItem;
          // 拼接 HTML(保留原样式,支持动态数据)
          const html = `
            <div style="overflow: auto; width: auto; word-wrap: break-word; font-size: 32rpx;">
              <span style="color: #1a73e8; font-weight: bold;">${indexNum}.</span>
              ${questionContent}
            </div>
          `;
          this.setData({ mpHtmlContent: html });
        }
      }
    });
  2. 样式优化:提取外部 CSS

    将内联样式提取到 WXSS,更易维护且支持复用:

    xml 复制代码
    /* 组件 WXSS */
    .question-container {
      overflow: auto;
      width: auto;
      word-wrap: break-word;
      font-size: 32rpx;
      line-height: 1.6;
      color: #333;
    }
    .question-index {
      color: #1a73e8;
      font-weight: bold;
      margin-right: 8rpx;
    }

    JS 拼接时引用类名:

    bash 复制代码
    updateMpHtmlContent(questionItem) {
      const { indexNum, questionContent } = questionItem;
      const html = `
        <div class="question-container">
          <span class="question-index">${indexNum}.</span>
          ${questionContent}
        </div>
      `;
      this.setData({ mpHtmlContent: html });
    }
  3. 特殊字符转义

    若富文本内容包含 <、>、& 等特殊字符,需先转义避免解析异常:

    bash 复制代码
    // 转义工具函数
    escapeHtml(str) {
      return str.replace(/&/g, '&amp;')
                .replace(/</g, '&lt;')
                .replace(/>/g, '&gt;')
                .replace(/"/g, '&quot;')
                .replace(/'/g, '&#39;');
    },
    
    // 拼接时调用转义
    const escapedContent = this.escapeHtml(questionContent);
    const html = `<div class="question-container"><span class="question-index">${indexNum}.</span>${escapedContent}</div>`;
  4. 图片预览与配置

    mp-html 自带图片预览功能,无需额外开发,还可配置图片样式:

    bash 复制代码
    <!-- 配置图片最大宽度、加载失败占位图 -->
    <mp-html 
      content="{{mpHtmlContent}}"
      img-width="100%"
      img-placeholder="https://xxx.com/loading.png"
      bindtapimg="handleTapImg" <!-- 自定义图片点击事件 -->
    />
  5. 禁用危险标签

    bash 复制代码
    <mp-html 
      content="{{mpHtmlContent}}"
      disable-tags="script,iframe,object"
    />

四、实战场景:解决小程序富文本常见问题

场景 1:渲染带图片的题目内容

后端返回的题目内容包含 标签,rich-text 可能出现图片溢出,mp-html 可完美适配:

bash 复制代码
// 拼接包含图片的 HTML
const html = `
  <div class="question-container">
    <span class="question-index">${indexNum}.</span>
    ${questionContent} <!-- 包含 <img src="xxx.png" alt="题目图片"> -->
  </div>
`;

<mp-html content="{{mpHtmlContent}}" img-width="100%" mode="widthFix" />
相关推荐
共享家95271 天前
搭建 AI 聊天机器人:”我的人生我做主“
前端·javascript·css·python·pycharm·html·状态模式
小小王app小程序开发1 天前
淘宝扭蛋机小程序核心玩法拆解与技术运营分析
大数据·小程序
说私域1 天前
AI智能名片商城小程序数据清洗的持续运营策略与实践研究
大数据·人工智能·小程序·流量运营·私域运营
东东5161 天前
xxx食堂移动预约点餐系统 (springboot+微信小程序)
spring boot·微信小程序·小程序·毕业设计·个人开发·毕设
web打印社区1 天前
vue页面打印:printjs实现与进阶方案推荐
前端·javascript·vue.js·electron·html
CHU7290351 天前
一番赏盲盒抽卡机小程序:解锁惊喜体验与社交乐趣的多元功能设计
前端·小程序·php
2501_915918411 天前
HTTPS 代理失效,启用双向认证(mTLS)的 iOS 应用网络怎么抓包调试
android·网络·ios·小程序·https·uni-app·iphone
数字游民95271 天前
半年时间大概上了70个web站和小程序,累计提示词超过20w
人工智能·ai·小程序·vibecoding·数字游民9527
说私域1 天前
微商企业未来迭代的核心方向与多元探索——以链动2+1模式AI智能名片商城小程序为核心支撑
大数据·人工智能·小程序·流量运营·私域运营
27669582922 天前
美团 小程序 mtgsig
python·小程序·node·js·mtgsig1.2·美团小程序·大众点评小程序