实时协作富文本编辑

Real-time collaborative rich text editing

我想为我的网络应用程序提供一个实时协作富文本编辑器。到目前为止,我已经做了很多研究,我真的有点沮丧,因为那里没有合适的东西。 问题是,每个解决方案都与编辑器紧密耦合(例如,Firepad 使用 CodeMirror/Etherpad 使用 Etherpad)。 我发现只有两个其他解决方案很有趣:

但是 Webstrate 的问题在于,它处于 alpha 版本中。所以对我来说它太麻烦了 - 没有成功。试图让它工作大约 2 天。文本同步很容易。但它不适用于 iframe 或其他东西。

我对协作 RTE 的要求很高 - 它应该支持:

虽然我现在正在寻找大约 3-4 天的解决方案 - 也许你们中有人有提示?会很温柔 ;)

我找到的最接近的东西是 http://quilljs.com/ - 它有一个 API 用于获取和更新文本增量以及用于获取和设置多个标记游标。它不会为您管理实时编辑,但它为您提供了足够的工作空间(比我发现的任何其他项目都多)。然而,它在格式化方面不如其他编辑器全面(例如,它不支持表格和嵌套列表)。它具有一定的可扩展性,因此您可以添加对其他 HTML 元素的支持。

您可以尝试 http://swellrt.org,它是一个用于开发实时协作应用程序的完整框架,包括 rich-text 支持和 editor 用于网络。

它提供了一个 JS API,类似于 GD Real-time API,加上富文本编辑。

编辑器可以扩展以支持任何附件。

它是 Apache Wave 的一个分支,概括了原始代码。

强大的协作富文本编辑器仍然有些前沿。大多数基于网络的文本编辑器分为两类。

  1. 与实时协作兼容但功能相当有限(例如,没有表格、没有嵌套元素等)的那些。
  2. 那些非常强大的基于 Web 的富文本编辑器,但缺乏 API 与实时技术集成。

然后是 ShareDB、Google Drive Realtime API、SwellRT 和 Convergence (full disclosure I am a founder at Convergence Labs 等协作引擎。这些类型的系统各自对数据模型和如何调解协作有自己的看法。可能是您最喜欢的富文本编辑器在内部工作的方式与协作引擎的 API 不兼容。

简单地同步 DOM 的技术很有趣,因为它们通常可以跨编辑器移植并且不太依赖于编辑器 API,但它们往往缺少很多必需的良好协作所需的实时编辑功能(共享光标、共享选择等)。这可能很难在引擎本身外部的 DOM 同步方法之上实现。不幸的是,如果没有这些功能,协作编辑体验就不会那么好。

有几个项目正在尝试纠正这种情况。 CKEditor 的工作人员正在开发考虑协作的 CKEditor 5。此外,在 Convergence,我们正尝试与许多流行编辑的作者合作,以实现实时协作。

事实是它仍然是一个相当新的 space 并且发展很快。没有经过测试、可扩展、灌篮高手的解决方案可以提供开箱即用的功能齐全、协作、免费和开源的编辑器。这种情况看起来在 2018 年有所改善。希望在接下来的 12-24 个月内,这会变得更容易解决。