Iframe 从DOM中删除并再次添加时,CKEditor将丢失内容 上下文

Iframe 从DOM中删除并再次添加时,CKEditor将丢失内容 上下文,iframe,ckeditor,Iframe,Ckeditor,是一个富文本编辑器,它使用带有可编辑主体的iframe 在这种情况下,我需要从页面中临时删除包含CKEditor实例的元素,然后在任意时间后将其添加回页面 问题 不幸的是,这似乎会导致iframe重置。如果编辑器最初包含富文本内容和可编辑的主体元素,则在将编辑器添加回页面后,iframe主体为空且不再可编辑 问题: 我希望有人能解释为什么会发生这种情况,以及在我将CKEditor添加回DOM后如何重新初始化它。我已经搜索了文档,还没有找到答案 销毁实例并重新创建是可能的,但这需要对我们的体系结构

是一个富文本编辑器,它使用带有可编辑主体的iframe

在这种情况下,我需要从页面中临时删除包含CKEditor实例的元素,然后在任意时间后将其添加回页面

问题 不幸的是,这似乎会导致iframe重置。如果编辑器最初包含富文本内容和可编辑的主体元素,则在将编辑器添加回页面后,iframe主体为空且不再可编辑

问题: 我希望有人能解释为什么会发生这种情况,以及在我将CKEditor添加回DOM后如何重新初始化它。我已经搜索了文档,还没有找到答案

销毁实例并重新创建是可能的,但这需要对我们的体系结构进行一些重大更改。如果可能的话,我宁愿避免这样。(尽管“别无选择”是可以接受的答案,如果是真的话。)

例子 下面是我的代码的一个极其简化的版本,它重现了这个问题:

CKEDITOR.replace('text');
var wrapper=$(“#wrapper”),
家长=$(“#家长”);
//在创建CKEditor实例之后,
//可以删除和附加编辑器
hideshow();
//在页面加载后删除并附加一些时间
//要丢失的编辑器内容(且不可编辑)
$(“#隐藏视图”)。单击(隐藏视图);
//(我猜这是因为点击事件发生了
//编辑器初始化后的某个时间。)
函数hideshow(){
wrapper.remove();
parent.append(包装器);
}

我可以向上面的
hideshow
函数添加什么来恢复编辑器的内容

我希望有人能解释为什么会发生这种情况,以及在我将CKEditor添加回DOM后如何重新初始化它。我已经搜索了文档,还没有找到答案

销毁实例并重新创建是可能的,但这需要对我们的体系结构进行一些重大更改。如果可能的话,我宁愿避免这样。(尽管“别无选择”是可以接受的答案,如果是真的话。)

答案是,如果要使用iframed编辑器,则没有其他选项。在这种情况下,必须重新初始化编辑器

iframe内容消失的原因与CKEditor无关——这纯粹是一种浏览器行为。从理论上讲,CKEditor可能会监听一些
unload
事件并缓存数据(如果当时可能的话),以便在某个时候恢复数据。然而,这将是相当复杂的,所以核心插件不能做到这一点。您可以尝试编写一个插件来增强
wysiwygarea
插件,但这可能很棘手

因此,如果您想继续使用iframed编辑器,那么手动重新初始化似乎是最简单的选择


另一个选项是使用插件,该插件使CKEditor使用simple
div
,而不是
iframe
。这有一些优点,比如卸载时没有问题,而且通常更轻,但当然,编辑内容的样式可能更难设置。

我也这么怀疑,但找不到任何文档来证实这一点。谢谢