ckeditor没有阅读媒体嵌入代码

时间:2013-06-07 03:39:02

标签: iframe ckeditor embed media

我使用ckeditor的media embed插件。它工作正常,代码正确保存在数据库和youtube,soundcloud等。玩家在页面上显示确定。但是当用户进入他的管理,他可以编辑信息时,内部和标签中的文本没有显示,因此当用户点击保存按钮时,所有先前保存的iframe将被“删除”,只有其余的将保存格式化文本。有没有办法在ckeditor中显示iframe代码?

3 个答案:

答案 0 :(得分:41)

我假设您使用Advanced Content Filter(ACF)附带的CKEditor 4.1.x.最有可能的是,您使用不同的编辑器进行前端/后端编辑。

每个插件都使用自己的标记,属性和类规则扩展allowedContent属性。使用这些规则,编辑器会自动删除不需要的内容,例如,如果您的前端编辑器允许<iframe>因为它已加载了mediaembed插件,那么没有此插件的后端编辑器将从内容中删除<iframe>

此外,ACF还会观察您的工具栏配置,因此即使您包含插件但又不想要工具栏中的按钮,按钮提供的任何内容(即<iframe>)也将在编辑器的输出中被禁止

您可以轻松检查您的编辑是否接受<iframes>。基本上调用以下内容并查看输出:

CKEDITOR.instances.yourInstance.filter.check( 'iframe' );
>>> true // it's allowed

如果是false,那么您的问题有多种解决方案:

  1. 在后端编辑器中启用mediaembed插件(使用工具栏中的按钮)。
  2. 延长config.extraAllowedContent以便重新恢复。
  3. 虽然是第一个solution is straightforward,但第二个可能对你来说很棘手。 mediaembed插件的allowedContent规则如下(请参阅plugin's code):

    allowedContent: 'iframe[*]' // stands for: iframe element with any attribute
    

    如果您将以下内容添加到后端编辑器的配置中,您将在内容中添加iframe而不加载mediaembed插件:

    config.extraAllowedContent = 'iframe[*]'
    

    如果此解决方案不适合您,请提供编辑器配置和CKEditor版本,以便人们可以帮助您。

答案 1 :(得分:22)

CKEDITOR.config.allowedContent = true;

为我工作。

答案 2 :(得分:0)

要允许CKEditor存储自定义HTML而不消失,您需要将允许的内容标志设置为true。

var allowedContent = true; // to allow custom html like iframe or div's

CKEDITOR.replace('yourEditorWindowsId', {
    allowedContent
},