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

时间:2013-09-20 00:38:06

标签: ckeditor

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

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

没有攻击CKEditor核心,是不是可能?

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

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

1 个答案:

答案 0 :(得分:2)

这与Google Docs允许的协作编辑非常相似。唯一的区别是您不需要通过网络同步这一点,并且不太可能(如果不是不可能)两个用户同时修改相同的文档。这使得事情更简单......一点点。

一年前,我和我的同事(我们都是CKEditor核心开发者)参加了Node.JS Knockout,我们的计划是创建一个基于CKEditor的协作编辑器。它只有48小时,所以结果并不令人印象深刻,但它确实奏效了。源代码为here

您将遇到的主要问题是将编辑器A中的更改应用于编辑器B ,而不会破坏编辑器B中的插入位置。基本上,您不能只从编辑器A获取数据并在编辑器B中设置它们,因为编辑器B中的所有内容都将被重置,包括滚动位置和插入符号。除非这不是问题,否则我认为是。

所以你需要:

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

这两种方式都是可行的,但如果你能很好地实现它,第一种方式会产生更好的结果。但是,如果您对DOM和contenteditable了解不够,那么此任务可能会让您感到不堪重负。在这种情况下,我建议阻止两次打开一个文件的可能性。

相关问题