21

我使用 ckeditor 的媒体嵌入插件。它工作正常,代码正确保存在数据库和 youtube、soundcloud 等中。播放器在页面上显示正常。但是当用户去他的管理部门时,他可以编辑信息,里面的文本和带有标签的文本没有显示,所以当用户点击保存按钮时,所有以前保存的 iframe 都将被“删除”,只有其余的的格式化文本将被保存。有没有办法在ckeditor中显示iframe代码?

4

3 回答 3

43

我假设您使用带有高级内容过滤器(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以使其再次恢复。

虽然第一个解决方案很简单,但第二个解决方案对您来说可能很棘手。allowedContentmediaembed 插件的规则如下(见插件代码):

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

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

config.extraAllowedContent = 'iframe[*]'

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

于 2013-06-09T08:22:29.600 回答
26
CKEDITOR.config.allowedContent = true;

为我工作。

于 2014-02-11T22:14:20.077 回答
1

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

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

CKEDITOR.replace('yourEditorWindowsId', {
    allowedContent
},
于 2019-11-24T12:10:33.820 回答