12

为什么可编辑的 html 被移动到 iFrame 中?我分析了不同的编辑器(TinyMce、CKEditor 等)并将可编辑的内容移动到一个单独的 iFrame 中,它们覆盖在原始文本上。

这是什么技术原因。我尝试了contenteditable="true",这也是所有这些编辑器的基础,但还没有找到这样做的理由。

4

2 回答 2

13

我是 CKEditor 核心开发人员。不是很长时间 - 只是今年下半年,但我学到了很多关于我们为什么使用 iframed 可编辑的 :)

  1. 样式 - iframed 编辑器的内容不继承页面的样式。这非常重要,因为我们无法重置样式(原文如此!CSS 真的很烂)。更重要的是 - 在 iframe 中,我们可以自由添加自己的样式,这也很有帮助。

  2. 只有在 iframed 可编辑中,我们才能处理带有头部、元数据、正文样式、标题等的整个页面。我们的一些用户需要这个。

  3. 浏览器有很多错误(且不完整)的 contenteditable 实现。例如,猜猜当您将列表粘贴到 Firefox 上的可编辑元素中时会发生什么<h1>(您可以在此编辑器中检查 - http://createjs.org/demo/hallo/)?它将泄漏出可编辑区域并成为不可编辑的元素。我们必须在编辑器中手动处理这些情况,这真的很辛苦:)。

  4. 我不确定这一点,但我相信designMode允许将整个文档切换到可编辑区域是最先出现的,contenteditable后来出现了。所以原因也可能是历史原因——很难从一种方法切换到另一种方法。

  5. 我们使用 iframed 可编辑文件的原因可能更多。当我学习它们时,我会更新我的答案:)

于 2012-06-27T08:25:47.983 回答
5

来自 tinymce from

嗨扎皮诺!

使用 IFrame 是 TinyMCE 等编辑器的本质,因为在框架中,您可以修改 HTML 文档的任何部分以满足您的需要,而不会破坏主页文档中的任何内容。特别是如果您想编辑一个完整的 HTML 文档,包括其中的部分,而没有 IFrame,您将无法做到这一点。

如果您将 TinyMCE 的文件存储在与您嵌入编辑器的页面不同的(子)域中,则会发生跨域脚本。向我们展示您遇到问题的安装测试场景,有人可能会帮助您!

来自德国的问候(回德国)

菲利克斯·里斯特。

于 2012-06-26T08:41:33.653 回答