2

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

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

在不破解 CKEditor 核心的情况下,这样的事情可能吗?

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

如果我愿意进入核心代码并稍微修改一下怎么办?会有多难?

4

1 回答 1

2

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

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

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

所以你需要:

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

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

于 2013-09-20T07:30:45.450 回答