我的问题与另一篇文章中描述的问题基本相同,只是它涉及CKeditor 4,而我实际上正在处理该模块的版本5。
简而言之:如果我尝试在 ckeditor 中编辑 html 文档,例如
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" />
</head>
<body>
<p>test</p>
</body>
</html>
使用源插件显示它或保存后保留的唯一可见的东西是清楚的
<p>test</p>
我的ckeditor配置是(我评论了我所做的无用尝试,对此进行了进一步描述)
/* multiple plugins import */
class Editor extends DecoupledDocumentEditor {
constructor(document) {
super(document);
// this.data.processor = new XmlDataProcessor( document); // attempt without Html processor
// this.editing.view.domConverter.preElements =["pre","style","head","html","body","meta"];
// this.editing.view.domConverter.unsafeElements = ["script"]; // attempts on the view converter
// this.data.processor.domConverter.preElements =["pre","style","head","html","body","meta"];
// this.data.processor.domConverter.unsafeElements = ["script"]; // attempts on the data converter
}
}
// Plugins to be included in the build.
Editor.builtinPlugins = [
/* List of plugins, for clarity I only left the relevant ones */
Essentials,
GeneralHtmlSupport,
SourceEditing
];
编辑器的实例化是通过
完成的DecoupledDocumentEditor
.create(this.options.textArea.val(), {
language: Bosecr.config.LOCALE,
htmlSupport: {
allow: [
{ // to keep all the html tags and their attributes
name: /.*/,
attributes: true,
classes: true,
styles: true
}
]
},
updateSourceElementOnDestroy: true
})
.then(editor => {
console.log("view.preElements : " + editor.editing.view.domConverter.preElements);
console.log("view.unsafeElements : " + editor.editing.view.domConverter.unsafeElements);
console.log("data.preElements : " + editor.data.processor.domConverter.preElements);
console.log("data.unsafeElements : " + editor.data.processor.domConverter.unsafeElements);
// editor.editing.view.domConverter.preElements=["pre","style","head","html","body"];
// editor.editing.view.domConverter.unsafeElements=["scripts"];
this.options.toolbarArea.append( editor.ui.view.toolbar.element );
this.options.textArea.append(editor.ui.getEditableElement());
this.options.widgets.editor = editor;
})
.catch(error => {
alert("error occured during editor creation : " + error);
});
我已经尝试过了
<body>
标签之外没有任何效果。HtmlDataProcessor
替换 XMLDataProcessor
=> 这带来的问题多于解决方案,因为 <br>
(非自关闭)和
会阻塞问题。我不确定为什么、何时或如何删除标签的内容。我可以想象两种情况:要么只保留
<body>
的内容(其余所有内容都被丢弃),要么只删除特定标签(是否有可配置的列表?)
作为一个疯狂的猜测,我尝试对 DomConverter 进行操作,它似乎是在 ckeditor“引擎”的 2 个位置定义的:既针对
editing.view
又针对 data.processor
。我尝试在 preElements列表中添加
html, body, meta, head
标签,但没有任何明显效果。为了确定一下,我尝试了这个
then()
函数内)constructor
我有一种感觉,我正在接近解决方案,而且我的需求并不那么奇怪,以至于这个新版本的 CKEditor 不允许它(事实上,它在以前的版本通过简单的布尔参数:
fullPage: true
)
所以我一定错过了一些东西。有谁知道我可以如何或朝哪个方向进一步调查?
嗯,我不知道我一开始是怎么想念它的,现在我找到了解决方案,它看起来很简单。
实际上,这只是官方文档中。除了一般的 html 支持功能之外,我还必须激活全页 html 编辑功能。
这显然是在模块定义中完成的:
/* multiple plugins import */
/*GeneralHtmlSupport is for the extra html support like homemade div,
while FullPage is for the out-of-the-<body> content */
import {GeneralHtmlSupport, FullPage} from '@ckeditor/ckeditor5-html-support';
class Editor extends DecoupledDocumentEditor {
/* overriding the constructor is actually useless*/
}
// Plugins to be included in the build.
Editor.builtinPlugins = [
/* List of plugins, for clarity I only left the relevant ones */
Essentials,
FullPage, // declare the new FullPage plugin
GeneralHtmlSupport,
SourceEditing
];
我按照他们的 nextjs 设置指南定制了 ckeditor5。它已经包含了我需要的 GeneralHtmlSupport、SourceEditing 插件并且工作正常。但是,当我添加 FullPage 时,它不起作用。我以与您相同的方式添加了它(由于它是本地构建,因此需要再次构建它并运行 npm 的额外步骤),但它不起作用,仍然会删除“脱离主体”的内容。
有什么想法我可以研究一下吗?