集成WangEditor富文本编辑器

259 阅读2分钟

1. 你们项目是如何集成 WangEditor 富文本编辑器的?主要用在哪些场景?

答案:
我们在 web-admin 前端项目中集成了 WangEditor,主要用于新闻/文章的内容编辑(如 src/views/news-manage/NewsAdd.vueNewsEdit.vue)。
集成步骤如下:

  • 通过 npm 安装 WangEditor:npm install @wangeditor/editor
  • 在需要的 Vue 组件中引入 WangEditor,并在 <template> 中添加编辑器容器。
  • <script setup>setup() 中初始化编辑器实例,设置内容双向绑定。
  • 编辑器内容通过 v-model 或事件同步到表单数据,最终随表单提交到后端。

2. WangEditor 编辑器内容是如何和后端数据进行交互的?如何实现内容的保存和回显?

答案:

  • 保存:用户在 WangEditor 中编辑内容后,内容会同步到表单的某个字段(如 form.content),提交表单时通过 API(如 POST /admin/newsPUT /admin/news/:id)将内容发送到后端,后端存储为 HTML 字符串。
  • 回显:编辑新闻时,前端通过新闻 ID 获取详情(如 GET /admin/news/:id),将后端返回的 HTML 内容赋值给 WangEditor 的内容,实现富文本的回显。

3. WangEditor 编辑器的图片上传功能是如何实现的?如何与后端对接?

答案:

  • WangEditor 支持自定义图片上传。我们在编辑器配置中设置了 customUploadImg 钩子,用户插入图片时会将图片文件通过 API(如 POST /admin/upload)上传到后端(如 web-server/routes/web/upload.js),后端返回图片 URL,编辑器将图片插入到内容中。
  • 后端接口会将图片保存到服务器指定目录(如 public/newsuploads/),并返回可访问的图片地址。

4. WangEditor 富文本内容在前端如何防止 XSS 攻击?你们做了哪些安全处理?

答案:

  • WangEditor 默认会对输入内容做一定的过滤,但我们还会在后端(如 controllers/admin/NewsController.js)对接收到的 HTML 内容进行二次过滤或转义,防止恶意脚本注入。
  • 前端在展示富文本内容时(如新闻详情页),会使用 v-html 指令,但会配合 DOMPurify 等库进行内容净化,进一步防止 XSS 攻击。

5. WangEditor 编辑器的内容如何适配移动端?你们做了哪些优化?

答案:

  • WangEditor 4.x 版本本身对移动端有较好支持。我们在集成时设置编辑器的宽度为 100%,并通过自定义样式(如在 src/styles/common.scss)优化编辑器在小屏设备上的显示。
  • 针对图片、表格等内容,设置最大宽度为 100%,防止内容溢出。
  • 在移动端页面(如 web-company)如果需要展示富文本内容,也会做响应式适配,保证内容可读性和操作体验。