需求背景

公司的管理后台有集成的富文本编辑器,运营同学可以在后台编辑文章发布到我们的服务器上,然后在客户端微信上可以作为一些内容的点击链接或者直接访问来显示出编辑的效果。但是我们的编辑器排版资源不够丰富,而且大部分运营同学都习惯秀米编辑器,在秀米编辑器上收藏了很多文章,而且秀米能够同步文章到公众号,且排版资源丰富。所以就考虑把秀米编辑后的文章移植到我们的编辑器里,然后我们的编辑器只当做一个发布的平台就好了。

官方提供的接入方案

可以参考这两个链接 http://r.xiumi.us/board/v5/2a5va/16516964 http://hgs.xiumi.us/uedit/ 但是发现一些问题,并不适合我们的编辑器。官方文档要求编辑器是Ueditor的内核。而且看了一下要求在页面引入的js都是以Ueditor为基础的,比如说UE.registerUI,虽然这段代码只是在Ueditor编辑器上提供打开秀米的入口,但是由于我们的代码里根本没有UE的全局变量,所以引入会报错。这样的话我们就只能自己试着接入了。

自己动手接入

整个过程大概是在你的编辑器的页面手动触发打开一个第三方的秀米页面。然后在这个页面中你可以利用秀米所有的内容进行编辑还可以登录找到你之前收藏在秀米的文章。然后编辑完成后,点击一个保存按钮,就把用秀米编辑的内容原封不动的放到了你的编辑器中(其实是把源码发送回到的你编辑器中). 现在来看代码: 首先在你的编辑器页面中引入一个iframe用来支撑第三方秀米的页面。 <iframe id="xiumi" src="//xiumi.us/studio/v5#/paper" v-show="showXiumi"></iframe>

var xiumi = document.getElementById("xiumi");
xiumi.onload = () => {console.log("postMessage");this.loadingXiumi = false;//由于秀米加载时间比较长,应该自定义一个loading,这里写你的自定义loading的代码xiumi.contentWindow.postMessage("ready", xiumi_url);
};
window.addEventListener("message",() => {if (event.origin == xiumi_url) {editor.$txt.html(event.data);//这步是你拿到秀米的源码后需要手动设置到你的编辑器的源码中去this.showXiumi = false;}},false
);

首先来看contentWindow属性,是指iframe所在的window对象,兼容各个浏览器可获得子窗口的window对象。postMessage() 方法可以安全地实现跨源通信,实现页面与嵌套的iframe消息传递。postMessage(data,origin) data为要传递的数据,origin为目标窗口的源。当秀米iframe加载完成后。向iframe发送一条消息,iframe的页面也通过window.addEventListener('message',xxx)接收。(必须的步骤,秀米页面做了一些逻辑,如果缺少则无法拿到秀米中编辑好的页面);我们需要做和秀米页面一样的逻辑监听message事件,秀米保存时源码里应该在触发保存事件的时候执行了window.parent.postMessage(xxx, '*'),这样可以拿到秀米保存时候postMessage的值为event.data。event.origin为发送消息窗口的源。拿到返回值后需要你手动设置到你的编辑器中的源码中(一般的编辑器都提供此api)。

点击秀米编辑显示iframe。如图:

遇到的问题

路径的问题

iframe中的src秀米demo里给的是http://xiumi.us/studio/v5#/paper,在测试环境的话同是http协议所以没有报错,但是我们线上是https所以存在了跨域请求的问题,所以改成"//xiumi.us/studio/v5#/paper"会去自动找协议,http就是http,https就是https了,所以就不存在跨域的问题了。

图片的问题

用秀米编辑的文章图片都是存在秀米服务器上的,当我们在我们的页面上访问比如这张图片http://statics.xiumi.us/stc/images/templates-assets/tpl-paper/image/6b22202e1bfb85cb8deb498cda43ec74-sz_519257.jpg的话会出现 You do not have permission to get URL '/stc/images/templates-assets/tpl-paper/image/6b22202e1bfb85cb8deb498cda43ec74-sz_519257.jpg' from this server.但是在浏览器直接get请求的话是可以取到的,可能是因为在我们页面发请求的时候请求头中带了refer也可能是别的原因(秀米自己做了一些限制)。 解决办法有两个: 第一个比较麻烦就是通过把图片上传到自己的图片服务器上,然后在秀米编辑时候以链接的形式插入,但是如果文章有大量图片的话对运营同学就比较残忍了。 第二个办法是,你先统计一下秀米图片的路径大概都有哪些,然后在你的编辑器保存的时候,让后端同学对拿到的内容所有秀米图片的路径做一次替换,替换为自己服务器的路径。然后你再你的页面访问的就是你们自己的链接,后端同学还需要用服务器做一次转发,当我们去请求我们的链接时,用服务器去请求秀米的图片然后在把请求到的图片发送给客户端。这样就不存在之前的403的问题了。

希望对有需要的同学有帮助。最后上几张用此过程发布的文章在线上的样子。

转载于:https://juejin.im/post/5ac2e7976fb9a028dc413207

后台第三方编辑器接入秀米编辑器整体流程相关推荐

  1. 手机token记录、支付宝、个推、goeasy、手机前端框架、阿里大于、百度编辑器、秀米集成解决方案

    goeasy:web页面推送解决方案 包名:goeasy jar:goeasy-sdk-0.3.5.jar gson-2.3.1.jar slf4j-api-1.7.2.jar 个推:app通知栏等推 ...

  2. 秀米编辑器(xiumi)+百度编辑器(Ueditor) 集成 :解决集成问题,秀米编辑器导出到百度编辑器格式问题,图片保存到自己的服务器(阿里云OSS)

    1.集成前提条件: 1. 需要集成百度编辑器到环境中 2.https环境下才可以导出数据到百度编辑器,如果不是https环境,会出现错误 然后我们开始讲解如何集成: 2.引入资源: //百度编辑器需要 ...

  3. react-ueditor-xiumi,秀米编辑器首次加载图片上传,视频上传无法使用问题

    在项目中引入秀米编辑器出现了首次加载图片上传和视频上传无法使用的问题 问题情况: 正常情况: 这种情况仅存在于首次加载,控制台查看元素样式,发现编辑器每次展示和隐藏,元素的id是增加的,也就是说每次隐 ...

  4. vue项目百度ueditor编辑器集成135和秀米,主题图标美化

    目录 前言 效果预览 教程 1. 首先下载主题美化插件 2. 接入135编辑器 3. 接入秀米编辑器 4. 组件封装 5. main.js引入样式和js文件 6. 页面使用 完成! 前言 本文介绍vu ...

  5. 秀米怎么添加附件,135编辑器如何添加附件(如Word、Excel、PPT、PDF等)

    公众号是信息发布的窗口,公众号文章的排版优秀与否,直接影响文章的质量和阅读数,所以公众号文章编辑器的选择是一件重要的事情.公众号诞生到现在,出现了一大批优秀的第三方编辑器,秀米和135编辑器就是其中较 ...

  6. vue+vue-ueditor-wrap+秀米

    我们的项目中使用的是ueditor+秀米的富文本编辑器,github上的大神做了一个基于vue的ueditor的组件,能够实现双向数据绑定,可以不用费劲的getContent.setContent.就 ...

  7. vue使用vue-ueditor-wrap集成秀米

    vue通过UEditor集成秀米 接入Ueditor vue-ueditor-wrap 接入秀米 接入Ueditor UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量, ...

  8. 秀米怎么添加附件链接,如Word、Excel、Pdf等

    今天公司的运营小妹问我,使用秀米编辑公众号文章时,怎么给推文添加附件链接.因为秀米属于第三方的编辑器,跟公众号原生编辑器还是不一样的,所以添加附件链接的操作也是不一样的.下面详细说一下吧,让大家对公众 ...

  9. 秀米怎么添加附件链接

    使用秀米给公众号图文排版时,经常需要在文章中添加附件,至于怎么在公众号文章中添加附件链接,我在上一篇文章已经详细介绍过了,在此不在赘述,感兴趣的同学可以点击链接前往阅读: 公众号如何添加附件? 很多同 ...

  10. 秀米怎么添加pdf附件「教程」

    秀米是一款实用的公众号图文排版工具,它拥有丰富的模板和大量的实用小组件,深受公众号运营者的喜爱,很多公众号运营者都倾向于使用秀米作为公众号推文编辑器的第一选择. 很多公众号运营者在发布图文内容的时候, ...

最新文章

  1. monty python dead parrot-BBC十大英剧神作出炉!
  2. 文章目录 | .NET Core on K8s学习之旅 (更新至20200618)
  3. list清空的函数java,6-1 jmu-Java-05集合-List中指定元素的删除 (20分)
  4. php 串行化数据,PHP中的串行化变量和序列化对象
  5. 新iPhone机模曝光:依旧三款配色 难有渐变机身
  6. AJAX vs FLEX:执行,传送,解析JSON,HTML,XML,AFM格式效率比较.
  7. 5大最流行手机webAPP框架之Ionic
  8. 小程序-demo:快速开始
  9. MySQL 中隔离级别 RC 与 RR 的区别
  10. 100万个脑筋急转弯,猜死你
  11. MATLAB中取整函数一览表
  12. 微软ime日文输入法每次切换英文和假名输入状态时,画面中央总有图片提示,怎么消掉
  13. 学而不思则罔,思而不学则殆
  14. IP归属地查询(基于本地IP库实现)
  15. android usb micro,朝夕相伴不知芳名? 来补补USB接口知识
  16. http 请求 405 错误,解决办法
  17. 使用树莓派进行pH测定
  18. 根据冯诺依曼模型组装一台电脑
  19. 【杂记】火狐浏览器主页被2345恶意篡改解决方法
  20. kingcms php 下载,KingCMS 通用版_KingCMS官方网站

热门文章

  1. python 查询ip工具
  2. Android编译时技术(二)ASM 基础使用之代码生成
  3. 尚学堂•百战程序员之技术人生
  4. Linux的常见的发行版以及不同发行版之间的联系与区别
  5. C# 身份证号取年龄
  6. python通过身份证或出生日期获取年龄
  7. Tomcat,jsp中文乱码问题解决
  8. java wsdl 生成_请问java文件wsdl文件如何生成
  9. HTML制作简单的个人简历网页
  10. 微星GE60有线网卡Qualcomm Atheros Bigfoot Killer E2200 ethernet card在ubuntu下无法找到驱动的解决办法...