查看: 335|回复: 0

鸿蒙富文本编辑editor不支持App的web-view方案

[复制链接]
发表于 5 小时前 | 显示全部楼层 |阅读模式
在 uni-app x 项目里做发帖、评论、笔记或商品描述时,富文本编辑几乎是绕不开的需求。uni-app x 提供的 editor 组件支持加粗、斜体、下划线、列表、标题、插入图片和自定义字体等能力,也能通过 uni.createSelectorQuery 获取 editor Context 后调用方法。但它有一个关键限制:只支持 Web 和微信小程序,Android、iOS、鸿蒙等 App 平台全部不支持。原文作者在鸿蒙设备上编译后页面没有任何内容,调试后才发现是平台兼容性问题。官方给出的方向是用 web-view 加载网页版富文本编辑器。下面按鸿蒙端落地流程梳理可执行方案。

editor 组件为什么不能直接上鸿蒙

editor 组件在 uni-app 时代主要面向小程序和 Web,uni-app x 继承了这一限制。它在 App 平台既不报编译错误,也不显示编辑区域。对鸿蒙来说,这意味着不能指望 editor 组件直接完成富文本编辑。它的功能列表仍然有参考价值:加粗、斜体、下划线、列表、标题、插入图片、自定义字体,以及通过 uni.createSelectorQuery 获取 Context 后调用相关方法。但只要目标是鸿蒙 App,就必须换路线。

鸿蒙端的替代方案:web-view + 网页编辑器

原文给出的核心结论是:App 平台用 web-view 加载网页版编辑器。具体有四类做法。

方案一是在线编辑器。用 web-view 直接加载远程编辑器页面,结构最简单,但依赖网络,并且需要自己搭建编辑器页面。

方案二是本地 HTML。把编辑器打包进 App,web-view 加载 /static/editor/index.html。可以使用 Quill.js、TinyMCE、wangEditor 等开源编辑器。这是原文中更推荐的落地方式。

方案三是第三方插件。uni-app 插件市场里有 qiun-data-charts、mp-html,以及各种基于 web-view 封装的编辑器组件,搜索“富文本编辑”可以找到。

方案四是原生自定义编辑器。在鸿蒙上可以用 ArkUI 的 TextInput 做基础输入,配合自定义工具栏切换格式,再用 Span 组件渲染富文本。这种方式工作量大,体验更原生,但很难做到 Quill.js 那样完善。原文也明确,鸿蒙原生开发中没有现成的富文本编辑器组件,因此 web-view 是当前更实用的选择。

web-view 加载本地编辑器的落地步骤

第一步,在 static/editor/ 目录下准备 index.html。页面中用 Quill.js 创建编辑器,工具栏放加粗、斜体、下划线、删除线、标题、有序/无序列表、图片、清除格式等按钮,并提供取消和发布按钮。提交时把 HTML、纯文本和 Delta 内容组装起来,通过 postMessage 发给 uni-app x:
  1. function submit() {
  2.   var contents = {
  3.     html: quill.root.innerHTML,
  4.     text: quill.getText(),
  5.     delta: quill.getContents()
  6.   };
  7.   if (window.uni && window.uni.webView && window.uni.webView.postMessage) {
  8.     window.uni.webView.postMessage({ type: 'submit', data: contents });
  9.   }
  10. }
  11. function cancel() {
  12.   if (window.uni && window.uni.webView && window.uni.webView.postMessage) {
  13.     window.uni.webView.postMessage({ type: 'cancel' });
  14.   }
  15. }
复制代码

第二步,在 uni-app x 的 uvue 页面中放置 web-view,src 指向本地编辑器路径,并监听 @message。回调里读取 event.detail.data,根据 type 处理 submit 或 cancel。原文示例中,submit 后打印编辑器内容并提示发布成功,cancel 则执行 uni.navigateBack()。

第三步,处理双向通信。web-view 向 uni-app x 发送消息使用 window.uni.webView.postMessage;uni-app x 接收消息通过 web-view 的 @message 事件。uni-app x 向 web-view 发送消息时,可以先用 uni.createWebviewContext('myWebView') 获取上下文,再调用 postMessage:
  1. const webViewContext = uni.createWebviewContext('myWebView')
  2. webViewContext.postMessage({ type: 'setContent', data: '<p>新内容</p>' })
复制代码

鸿蒙平台需要注意通信限制:postMessage 的数据大小有限制,某些复杂对象可能无法正确传递。建议传递 JSON 字符串,而不是直接传对象。

完整页面结构上的取舍

原文的完整实战页面由三部分组成:顶部标题输入框,限制 50 字并展示计数;中部 web-view 富文本编辑器;底部图片、视频、链接入口和发布按钮。发布前先校验标题和内容是否为空,为空则 uni.showToast 提示,通过后打印 title 和 content,提示发布成功,并在 1.5 秒后 uni.navigateBack()。这个结构适合发帖、笔记一类场景,把轻量输入交给 uni-app x,把复杂富文本编辑交给 web-view 内的 Quill.js。

鸿蒙平台适配时的性能和原生对比

鸿蒙平台支持 web-view 组件,可以加载本地或远程 HTML,这是富文本编辑的主要实现方式。性能主要受三方面影响:编辑器库体积,Quill.js 约 40KB,TinyMCE 更大;HTML 是否本地化,本地加载比远程快;设备性能。建议把编辑器文件打包进 App,避免网络加载延迟。

与鸿蒙原生对比,ArkUI 侧通常只能用 TextInput 做基础输入,用自定义工具栏切换格式,用 Span 渲染富文本,工作量大且难以达到 Quill.js 的完善程度。因此原文的结论是,web-view 方案虽然不是原生体验,但更实用。

六个常见坑

第一,editor 组件不支持 App 平台,包括鸿蒙。编译到 App 不报错,但页面不会显示编辑区。

第二,web-view 加载本地文件要用 /static/ 开头的绝对路径,不能用相对路径:
  1. <web-view src='/static/editor/index.html'></web-view>
  2. <web-view src='./editor/index.html'></web-view>
复制代码

第三,通信数据会被序列化。复杂对象如 Delta 格式可能丢失部分信息,建议在 Web 端先转成 JSON 字符串再发送。

第四,编辑器图片上传不能在 web-view 里直接调用 uni.uploadFile,需要在 Web 端用 XMLHttpRequest 或 fetch 单独处理。

第五,键盘弹起可能遮挡编辑区。web-view 中的编辑器不会自动上推页面,需要在 HTML 中监听键盘事件并调整编辑区域高度。

第六,样式兼容性。web-view 中的编辑器样式可能和普通浏览器有差异,建议使用简单 CSS,避免太新的特性。

结论

在 uni-app x 的鸿蒙平台上,富文本编辑目前只能走 web-view 方案。Web 和小程序可以继续用 editor 组件,App 平台则用 web-view 加载网页版编辑器。关键点包括:editor 不支持 App;优先用 Quill.js 等开源编辑器;编辑器文件打包到本地;通过 postMessage 通信并注意 JSON 字符串化;图片上传和键盘弹起在 Web 端单独处理。原文验证过的组合是 web-view + Quill.js,它虽然不如原生编辑器体验好,但仍是当前鸿蒙平台上较实用的选择。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-9-18 13:34 , Processed in 0.021754 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部