CKEditor 4是否真的为HTML5做好了准备

时间:2013-05-16 15:10:44

标签: html5 ckeditor

我尝试新的CKEditor 4,因为版本3.6中的代码更正不能接受这样的HTML 5有效代码:

<a href="#"><p>something</p></a>

但新的CKEditor版本仍然会修复此代码,那么问题出在哪里?是否需要在配置中将HTML 5设置为默认值?

4 个答案:

答案 0 :(得分:6)

不。 CKEditor解析器正在使用静态DTD。 HTML5无法用静态DTD描述,所以目前CKEditor不支持这种标记。

请参阅the ticket了解详情。

答案 1 :(得分:3)

对于未来有同样问题的人来说,我确实提出了一个解决方案,但我并不过分乐观,因为它应该有一个选择,因为它完美 HTML5

中有效

config.js文件中,添加以下配置设置:

config.protectedSource.push(/[\r|\n]|(<a([^*>]+>)|<\/a>)/g);

以下是正则表达式的演示: DEMO

基本上我们在这里所做的就是:

  1. 查找新行\r
  2. 查找新行\n
  3. 找到任何空缺主题:<a后跟文字,然后我们来到> - (<a([^*>]+>)
  4. 查找关闭锚标记<\/a>
  5. 这个正则表达式将停止对找到的结果进行评估,我确定有更好的方法来做到这一点,因为我不是regexPERT(&lt; - 擅长双关语!)

    这应禁用用于在wysiwyg模式下编辑锚点的UI。这个修复对我有用,因为我添加它的编辑器在源模式下是固定的,所以这对于此目的是好的。

    config.allowedContent = true;
    config.fullPage = false;
    

    希望这有帮助

答案 2 :(得分:0)

有一种可行的方法可以使用xsl将任何未知元素映射到div或span-tag,使用原始元素作为classname,然后反转此onsubmit。我们一直这样做,然后回到xml,它运行得很好。

答案 3 :(得分:0)

在config.js文件中,添加以下配置设置:

// Display all children elements allowed in a <a> element.
console.log(CKEDITOR.dtd[ 'a' ]);

// Simply redefine DTD like this:
CKEDITOR.dtd['a']['div'] = 1;
CKEDITOR.dtd['a']['p'] = 1;
CKEDITOR.dtd['a']['i'] = 1;
CKEDITOR.dtd['a']['span'] = 1;

// Check if <div> can be contained in a <p> element.
console.log( !!CKEDITOR.dtd[ 'a' ][ 'div' ] ); // default false

// Check if <a> can be contained in a <div> element.
console.log( !!CKEDITOR.dtd[ 'div' ][ 'a' ] ); // default true

对于Drupal 8,您可以将此代码添加到您的管理主题js中,而不是最佳解决方案但功能