同一页上有多个同步的CKEditor实例?

同一页上有多个同步的CKEditor实例?,ckeditor,Ckeditor,我正在使用CKEditor开发一个文档编辑应用程序,用户可以在一对编辑器实例中并排打开多个文档 大多数情况下,用户将编辑两个不同的文档,但也可能两个编辑器实例包含同一文档的不同视图。这使得事情变得棘手,因为我希望一个编辑器实例中的更改能够立即反映在另一个实例中 如果不攻击CKEditor内核,这样的事情可能吗 如果没有,是否可以编写一个插件来提供这种功能 如果我愿意进入核心代码并进行一些黑客攻击呢?这有多困难?这与谷歌文档允许的协作编辑非常相似。唯一的区别是,您不需要通过网络同步,而且两个用户同

我正在使用CKEditor开发一个文档编辑应用程序,用户可以在一对编辑器实例中并排打开多个文档

大多数情况下,用户将编辑两个不同的文档,但也可能两个编辑器实例包含同一文档的不同视图。这使得事情变得棘手,因为我希望一个编辑器实例中的更改能够立即反映在另一个实例中

如果不攻击CKEditor内核,这样的事情可能吗

如果没有,是否可以编写一个插件来提供这种功能


如果我愿意进入核心代码并进行一些黑客攻击呢?这有多困难?

这与谷歌文档允许的协作编辑非常相似。唯一的区别是,您不需要通过网络同步,而且两个用户同时修改同一文档的可能性很小(如果不是不可能的话)。这让事情变得更简单。。。一点点

一年前,我和我的同事(我们都是CKEditor的核心开发人员)参加了这个项目,我们的计划是基于CKEditor创建一个协作编辑器。这仅仅是48小时,所以结果并不令人印象深刻,但它奏效了。源代码是

您将遇到的主要问题是在不中断编辑器B中插入符号位置的情况下,将更改从编辑器A应用到编辑器B。基本上,您不能只从编辑器A获取数据并在编辑器B中进行设置,因为编辑器B中的所有内容都将重置,包括滚动位置和插入符号。除非这不是个问题,但我想是的

因此,您需要:

  • 或者找到一个很好的算法来提取编辑器a中的更改(比如
    diff
    ,但处理的是DOM树,而不是HTML字符串),然后找到一个算法将它们应用到编辑器B(这就是我们在Node.JS Knockout上实现的)
  • 或者在编辑器B中重置数据后,找到猜测插入符号位置的方法;例如,您可以在设置数据之前记住编辑器B中的插入符号上下文,并尝试在将加载的数据中找到它

这两种方法都是可行的,但是如果您能够很好地实现它,第一种方法将产生更好的结果。但是,如果您对DOM和
contenteditable
了解不够,那么这项任务可能会让您不知所措。在这种情况下,我建议阻止两次打开一个文档的可能性。

这正是我预期的实现方式,尽管我没想到已经有了github回购协议。谢谢