内容可编辑文本编辑器

时间:2013-04-18 04:12:46

标签: html wysiwyg contenteditable

我已经尝试过几个HTML编辑器,包括TinyMCE,CKEditor和现在的NicEdit。 NicEdit在一个方面很好 - 它很容易定制。但是,我发现它们都有产生非常差的HTML的倾向。不一定是这样,但是因为他们没有做很多工作来正确解释无效的用户操作,例如在没有先做出选择的情况下尝试设置样式。

最终使用包含

之类的HTML太容易了
<span style='color:#ff0000'><span style='color:#ff0000'><span style='color:#ff0000'>Red</span></span></span>

我是否正确地认为这几乎是内容可编辑概念的限制?如果目的是电子邮件或在诸如此类的论坛上的帖子,那么糟糕的HTML并不重要,但如果生成的HTML必须在网页的上下文中使用,则会感到相当不舒服。如果所有这些都是对的,那么替代方案是什么?也许基于Flash的插件编辑器可以生成更好的HTML并且更难以解释用户想要做什么?

我认为原则上可以研究生成的输出,并在必要时清除六角琴的跨度,但这可能是一项艰巨的任务。

3 个答案:

答案 0 :(得分:25)

一开始我应该提到我是CKEditor核心开发人员,因此我的意见可能不完全客观:)。

HTML编辑的状态AFAIK在过去几年中没有改变。浏览器供应商花了很少的时间来修复错误 - 由浏览器问题引起的CKEditor trac上大多数最老的错误仍然有效,而且我们创建的大多数黑客仍然是必需的。我不仅仅意味着我们仍然支持IE 7或8,因为实际上IE可能不是最差的。我没有准确地检查过,但我认为,由于最近IE版本中DOM API的一般改进,它们可能比其他浏览器需要更少的黑客,因为它的编辑支持似乎是最稳定和完整的。例如。 Webkit浏览器需要最丑陋的hack(参见:Webkit bugclosed CKEditor ticket),这个bug 5岁。更重要的是 - 这不是一个边缘情况或不太可能的情况 - 这个问题使得无法创建整个范围的选择 - 例如在一个空的内联元素IIRC内。

因此,与一般的网络技术不同,HTML编辑与10年前的版本保持一致。相同的错误,相同的缺失功能,相同的...标记。猜猜fontName命令创建了什么? <font face=""> - 是的,不是在开玩笑。至少浏览器在这里非常一致......但是一致性很快就消失了。

规格怎么样?有一个draft,但它根本没有帮助 - 它只是标准化当前状态,我们知道它看起来不太好。而AFAICS,草案已经死了。

还有一件令我担心的事情 - 编辑的方向。 Google在Gmail中使用contenteditable(不,Google文档不是基于contenteditable构建的),因此它不关心HTML输出。 Apple在他们的iOS电子邮件应用程序中重用HTML编辑组件,也许在Mail for MacOS中重复使用(因为我看到了相同的特定行为)。 Mozilla在Thunderbird中重用了Gecko,如果微软在Outlook中做同样的事情,我也不会感到惊讶。所有这些都不关心HTML输出。这些引擎用于理解每个垃圾而不是修复它,HTML编辑草案就是它的全部内容。

感谢所有这些,我们可以看到像this one这样的问题。在Blink/Webkit bug report中,我在按退格键时总结了整个范围的错误(来自我们的POV - 关心HTML的开发人员)。它看起来很漂亮(尽管它没有),但HTML和编辑API并不重要。

我不在乎这个。我需要一个编辑器!

所有这一切的解决方案是在浏览器之后修复所有内容和/或用我们自己的替换他们的本机实现。在过去的1。5年里,我几乎专注于过滤和规范化输入和输出。在CKEditor 4.0中,我们重写了整个粘贴和HTML插入过程,在最近发布的CKEditor 4.1中,我们引入了Advanced Content Filter,它使输入数据适应编辑器配置。因此,启用的功能越少,HTML中允许的功能就越少。检查this sample - 尝试粘贴/编写/创建糟糕的HTML。

当然,还有改进的余地。例如。我们无法在编辑过程中立即过滤数据。如果浏览器(如Webkit)造成混乱,我们可以在输出上修复它,但实际上我们还没有决定这样做,因为过滤是一个非常复杂的过程,可能破坏性能。我们限制输入和用户操作,因此有一天我们将实现自己的退格/删除处理程序,以防止浏览器弄乱我们的HTML。这是唯一的解决方案,这就是为什么只有2或3个好的WYSIWYG编辑器。

无论如何,浏览器的HTML编辑实现几乎没有任何变化,但在WYSIWYG编辑器世界中已经发生了很多变化。如果您根据几年前的经验,我建议您再次检查一下。

答案 1 :(得分:2)

我花了很多时间试图找到确保从WYSIWYG编辑器中获得生产级HTML的方法,我认为我应该在这里分享我的结果,以便任何遇到此线程的人都能获益。

非常简短的建议 - 不要浪费你的时间。内容可编辑的编辑器永远不会提供任何甚至远离生产级HTML的东西。像Reinmar这样的人已经做了很多工作来尽量减少这一点,但是用户很容易将处理内容可编辑的底层浏览器代码抛到一个tizzy中。

最好使用BBCode标记。 100%防弹选项是让用户编辑BBCode并严格控制他/她在任何时候可以做的事情。我已经在我自己的项目中完成了这个,但是让非技术用户玩任何描述的标记的问题是一个棘手的问题。将自己的WYSIWYG界面用于BBCode编辑是一项不能轻易承担的工作。幸运的是,帮助就在SCEditor的形式。山姆在这里做得很出色。请注意 - 出现的内容仍然可以包含一些“汤”位,因为WYSIWYG位仍然依赖于可编辑的内容。但是,清理相对容易。

答案 2 :(得分:-6)

对于文本编辑,我们可以使用HTML5的contenteditable属性 通过这个我们可以使任何元素可编辑 https://plus.google.com/114254873085584811912/posts/LqpzvvzoMYc