uni-app rich-text组件塞入emoji表情 部分机型直接出现闪退

uni-app rich-text组件塞入emoji表情 部分机型直接出现闪退

项目属性 信息
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 window10
HBuilderX类型 正式
HBuilderX版本号 3.98
手机系统 iOS
手机系统版本号 iOS 13.4
手机厂商 苹果
手机机型 安卓ios都会出现
页面类型 nvue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

  • rich-text组件中正常塞入的文字中加入emoji会闪退

预期结果:

  • 预期结果应该正常显示系统的emoji表情

实际结果:

  • 部分机型闪退 部分机型表情消失

bug描述:

  • uniapp 纯nvue打包 在rich-text组件 塞入emoji标签会出现闪退现象
  • 不固定机型;公司收集的手机型号中荣耀华为手机出现的比较多,我公司的苹果低版本的iphone11 系统13.6.5基本上遇到这个就闪退
3 回复

请上传一个可复现问题完整的示例工程便于排查问题


有没有使用过自定义字体

uni-app 中使用 rich-text 组件时,如果直接插入 emoji 表情,可能会导致部分机型出现闪退的问题。这通常是因为某些 emoji 表情的编码或渲染方式在某些设备上不被支持,或者 rich-text 组件在处理这些特殊字符时出现了问题。

以下是一些可能的解决方案:

1. 使用 text 组件代替 rich-text

如果 emoji 表情不需要复杂的样式或布局,可以考虑使用 text 组件来显示 emoji,而不是 rich-texttext 组件通常对 emoji 的支持更好。

<text>😊</text>

2. 使用 image 组件代替 emoji

emoji 表情转换为图片,然后使用 image 组件来显示。这样可以避免 emoji 编码和渲染的问题。

<image src="/static/emoji/smile.png" mode="aspectFit"></image>

3. 使用 unicode 编码

如果必须使用 rich-text 组件,可以尝试将 emoji 表情转换为 unicode 编码,然后插入到 rich-text 中。

<rich-text :nodes="emojiNodes"></rich-text>
export default {
  data() {
    return {
      emojiNodes: '&#128512;' // 例如,😊 的 unicode 编码是 128512
    }
  }
}

4. 使用第三方库

可以使用一些第三方库来处理 emoji 表情,例如 twemoji,它可以将 emoji 表情转换为图片,并且支持跨平台。

<rich-text :nodes="emojiNodes"></rich-text>
import twemoji from 'twemoji';

export default {
  data() {
    return {
      emojiNodes: twemoji.parse('😊') // 将 emoji 转换为图片
    }
  }
}

5. 检查设备兼容性

如果问题只出现在某些特定机型上,可以尝试检查这些设备的系统版本和浏览器内核版本,看看是否有已知的 emoji 渲染问题。如果有,可以考虑在这些设备上禁用 emoji 或者使用替代方案。

6. 更新 uni-app 版本

确保你使用的是最新版本的 uni-app,因为新版本可能会修复一些已知的兼容性问题。

7. 使用 web-view 组件

如果以上方法都无法解决问题,可以考虑使用 web-view 组件来加载一个包含 emoji 的网页,这样可以绕过 rich-text 组件的限制。

<web-view src="https://example.com/emoji-page"></web-view>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!