我正在使用CKEditor处理文档编辑应用程序,用户可以在一对编辑器实例中并排打开多个文档。
大多数情况下,用户将编辑两个不同的文档,但两个编辑器实例也可能包含同一文档的不同视图。这使事情变得棘手,因为我想在一个编辑器实例中进行更改以立即反映在另一个实例中。
没有攻击CKEditor核心,是不是可能?
如果没有,是否可以编写一个提供这种功能的插件?
如果我愿意进入核心代码并进行一些攻击呢?这有多难?
答案 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上实现,这两种方式都是可行的,但如果你能很好地实现它,第一种方式会产生更好的结果。但是,如果您对DOM和contenteditable
了解不够,那么此任务可能会让您感到不堪重负。在这种情况下,我建议阻止两次打开一个文件的可能性。